[android] FLAG_ACTIVITY_SINGLE_TOP으로 activity 실행시 intent 받아 처리하기
startActivity를 호출하여 전달할 값을 putExtra()를 호출하여 intent에 설정하고, 호출된 Activity에서 getIntent()로 intent를 얻어 왔는데 이상하게 넘겨준값이 없다. 한참 고민하다가 발견한 것은 startActivity로 넘겨주는 intent에 FLAG_ACTIVITY_SINGLE_TOP을 설정한 점이다.
Intent intent = new Intent(context, SomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(PARAM_1, value1);
intent.putExtra(PARAM_2, value1);
intent.putExtra(PARAM_3, value1);
context.startActivity(intent);
FLAG_ACTIVITY_SINGLE_TOP 은 Activity를 재사용 하기 위해서 설정한것이고 필요없는 Activity를 재거하기 위해서 FLAG_ACTIVITY_CLEAR_TOP 을 같이 조합하였다.
이런경우 SomeActivity에서는 onNewIntent()를 override 해서 intent를 받아야 한다.
그리고 setIntent()를 호출해서 다음에 ( onResume 같은데서 ) getIntent로 intent를 다시 참조해야 할 경우를 위해서 대비하는 것이 좋다.
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (null != intent) {
int defaultValue = 0;
index = intent.getIntExtra(PARAM_1, defaultValue);
setIntent(intent);
}
}
호출되는 순서는 onCreate() 대신에 onNewIntent()가 호출되고 다음으로 onResume() 이 호출된다.
처음 startActivity 호출시
1. onCreate
2. onStart
3. onResume
해당 Activity가 실행된 상태에서 flas를 추가하고 다시 startActivity 호출시
1. onNewIntent
2. onResume