휴휴님의 블로그 참조 : http://huewu.blog.me/110087045138
전체 FLAG의 정보는 android 사이트 참조 : http://developer.android.com/reference/android/content/Intent.html
주로 사용되는 4가지 FLAG
FLAG_ACTIVITY_SINGLE_TOP
Activity가 스택의 맨 위에 존재 하는 경우에 기존 Activity를 재활용 한다.
(Activity호출순서) 0->1->2->3 이렇게 스택이 쌓인 경우(스택의 맨 위는 3)
intent = new Intent(this, Activity3.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
0->1->2->3 그래도 유지 된다. 대신 Activity3는 onPause()->onNewIntent() -> onResume() 호출된다.
3번 액티비티가 존재하지 않거나 스택의 맨 위가 아닌 경우 그냥 스택에 쌓이게 되며 onNewIntent() 도 호출된다.
FLAG_ACTIVITY_NO_HISTORY
해당 플래그를 주고 액티비티를 호출하면 호출된 액티비티는 스택에 남지 않는다.
0->1->2->3 호출할때 Activity1 에서 Activity 2를 호출할때
intent = new Intent(this, ActivityTest3.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
하면 스택에는 0->1->3 만 남게 된다. 하지만 Activity 2의 Destory()의 시점은 Activity 3이 종료 된 이후에 호출된다라는것을 주의한다.
FLAG_ACTIVITY_REORDER_TO_FRONT
스택의 순서를 변경해 준다.
0->1->2->3 일때 Activity 3에서 Activity 1을 호출 할때 이 플래그를 설정하면
0->2->3->1 로 변경된다. (안드로이드 문서에서 FLAG_ACTIVITY_CLEAR_TOP플래그를 무시한다고 되어 있다.)
FLAG_ACTIVITY_CLEAR_TOP
스택에 기존에 사용하던 Activity가 있다면 그 위의 스택을 전부 제거해 주고 호출한다.
0->1->2->3 일때 Activity 3에서 Activity 1을 호출할때 이 플래그를 설정하면
0->1 만 남게 된다. (2, 3은 제거) 이때 Activity 1은 onDestory() -> onCreate()가 호출된다. 삭제하고 다시 만들게 된다.
그래서~~ FLAG_ACTIVITY_SINGLE_TOP와 같이 써준다. 그러면 onNewIntent()-> onResume() 가 호출된다.
만약 스택에 없다면~~ 당연히 아무것도 지우지 못하고 맨 위에 올라가게 된다.
intent = new Intent(this, ActivityTest1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
출처: http://comxp.tistory.com/109 [까칠하게...]
'개발지식창고 > Android_Java' 카테고리의 다른 글
폰트 사이즈 px to dp (0) | 2018.06.17 |
---|---|
안드로이드 액션바 다루기 (0) | 2018.06.13 |
안드로이드 Font 모든 곳에 적용하기 (0) | 2018.06.06 |
Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView (0) | 2018.05.23 |
Android Studio에서 SVN ignoe List 설정 (0) | 2017.08.25 |