[android] concurrent document에 대해 알아본다. |
https://www.youtube.com/watch?v=4Y3JMvbcxQE
https://developer.android.com/guide/topics/manifest/activity-element#dlmode
-
안드로이드 LOS 부터 concurrent document 라는 새념이 생겼다.
이는 런타임 시에 앱의 테스크를 몇 개라도 동적으로 생성할 수 있게 된다.
-
concurrent document 를 적극 활용하는 대표적 앱은 google drive 가 있겠다.
-
concurrent document 를 하는 방법은 두가지가 있다.
첫째는 startActivity 시 Intent 의 flag 로 FLAG_ACTIVITY_NEW_DOCUMENT 를 추가해주면 된다.
두번째는 activity 의 manifest 정의에 android:documentLaunchMode=“intoExiting” 를 추가해주면 된다.
위의 방법은 이미 존재하는 태스크로 동일한 데이터를 갖는 인텐트를 요청하면 새로운 태스크가 생성되지 않는다.
-
항상 새로운 테스크가 생성되게 하려면 아래의 작업을 추가해야 한다.
첫번째는 startActivity 시 Intent flag 로 FLAG_ACTIVITY_NEW_DOCUMENT 뿐만 아니라 FLAG_ACTIVITY_MULTIPLE_TASK 를 추가해준다.
두번째는 activity 의 manifest 정의에 android:documentLaunchMode=“always” 를 추가해주면 된다.
-
manifest 에 정의하는 documentLaunchMode 는 4가지 값을 가질 수 있다.
intoExisting
같은 ComponentName, data URI 를 가진 녀석을 찾으면, 해당 task 를 clear 하고 onNewIntent 를 호출하며 restart 시킨다. 만약 동일한 녀석을 찾지 못하면 새로운 task 를 만든다.
always
항상 새로운 녀석을 생성한다.
none
기본값이다. 새로운 task 를 생성하지 않는다. 새로운 task 를 생성하는 경우는 오직 FLAG_ACTIVITY_NEW_TASK 가 설정되었을 때 뿐이다.
never
Intent 가 FLAG_ACTIVITY_NEW_DOCUMENT 를 가지고 있다고 해도 새로운 document 를 launch 시키지 않는다. 이 설정은 FLAG_ACTIVITY_NEW_DOCUMENT 와 FLAG_ACTIVITY_MULTIPLE_TASK flag 를 override 한다.
-
none, never 를 제외한 다른 값이 설정되는 경우, activity 의 launchMode 는 항상 standard 여야 한다.
만약 그렇지 않으면 none 으로 작동한다.
-
multi window case 에 FLAG_ACTIVITY_LAUNCH_ADJACENT 로 호출하면 현재 activity 의 옆에 붙게 해준다.
-
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET (deprecated @ API 21) 는 FLAG_ACTIVITY_NEW_DOCUMENT 와 동일하다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] Logcat 에서 로그를 제대로 찍지 않아요! (4) | 2019.05.24 |
---|---|
[android] dialog style 속성 (0) | 2019.04.27 |
[android] QUOTED-PRINTABLE 의 예외처리 =\r\n (0) | 2019.04.10 |
[android] CONNECTIVITY_ACTION deprecated 에 대한 이야기 (0) | 2019.04.09 |
[Effective Unit Testing] Appendix B. JUnit 확장하기 (0) | 2019.03.29 |
댓글