[android] FLAG_ACTIVITY_SINGLE_TOP으로 activity 실행시 intent 받아 처리하기
android 2013. 4. 18. 10:21
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