# Intent flag
FLAG_ACTIVITY_SINGLE_TOP
열고자 하는 액티비티가 이미 맨 위에 있으면 재활용한다.
스택이 이렇게 있을때
B
A
누르면 B로가는 노티피케이션이 왔다치자.
그 노티피케이션을 눌렀을때 아무런 일도 일어나지 않는게 바람직하지만,(현재가 B니까)
실제로는 이렇게된다.
B
B
A
만약 launchMode를 singletop으로하면 방지된다.
singletop은 현재 열려는 액티비티가 이미 top에 있는지 확인하고, 있으면 다시 만들지 않는다.
그리고 onCreate대신에 onNewIntent를 부른다.
FLAG_ACTIVITY_CLEAR_TOP
열고자하는 액티비티 위에 있는 액티비티를 클리어한다.
A,B,C,D 에서 D가 B를 불렀을때
C,D가 없어지고 B가 맨앞으로 나온다.
FLAG_ACTIVITY_SINGLE_TOP을 함께 쓰지 않은 경우, B는 파괴됬다가 재생성된다.
FLAG_ACTIVITY_SINGLE_TOP을 함께 쓴 경우 B는 재활용되고 onNewIntent 가 불린다.
FLAG_ACTIVITY_NEW_TASK
이 플래그로 열고자 하는 액티비티가 Luncher 스타일이길 원할때. 즉, 새로운 task의 진입점일때 이 플래그를 쓴다. 즉, 이 액티비티를 새로운 task에서 열고싶다면 명시해라.
이 플래그를 쓰면, 만약 열고자하는 액티비티가 포함된 Task가 이미 실행 중일때 새로운 activity가 만들어지지 않는다. 대신, 해당 Task가 맨 앞으로 온다.
FLAG_ACTIVITY_MULTIPLE_TASK
이 플래그를 FLAG_ACTIVITY_NEW_TASK랑 같이 쓰면 기존 task가 있는지 여부와 상관없이 무조선 새로운 task를 만든다.
FLAG_ACTIVITY_NEW_DOCUMENT
overviewScreen (recent Screen) 상에서 새로운 윈도우로서 보여줘라.
Intent.FLAG_ACTIVITY_CLEAR_TOP
or Intent.FLAG_ACTIVITY_SINGLE_TOP
or Intent.FLAG_ACTIVITY_NEW_TASK
의 의미는 대상 액티비티를 열되, 대상 액티비티가 이미 존재하면 대상 액티비티 위에 있는 액티비티를 모두 종료하고 대상 액티비티는 이미 존재하는 인스턴스를 그대로 쓴다. 그리고 대상 액티비티를 새로운 Task에서 열되, 이미 이 액티비티가 포함된 Task가 존재한다면 단지 그 Task를 맨 앞으로 보내라.
라는 것..
-> 새로운 task를 만드는 intent를 실행했을때는, 아닐때와는 달리 마치 다른 앱이 끼어드는것처럼 옆에서 액티비티가 나오면서 실행된다.
-> 새로운 task를 만드는 이유?
앱의 depth가 너무 깊어져서 뒤로가기를 마구 눌러야 나갈 수 있는데 어떤 특정 화면에서는 뒤로가기 한번만 눌러도 앱을 나가고 싶을때, 그 특정화면을 새로운 task로 만든다.
# affinity
This parameter accepts a String. By default, every activity has same affinity as your package attribute value of mainfest tag.
<manifest package="com.example"...>
E - chat view
D - weather screen
C - map view
B - weather screen
A - login screen
이렇게 태스크에 들어가있을 경우,
D에서 내용을 수정하고 뒤로가기버튼을 눌러 B까지 갔을때 수정한 내용이 반영이 안된다.
이때 반영되도록 하는게 affinity다. affinity를 설정한 액티비티는 하나의 인스턴스만 갖는다.