본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] concurrent document에 대해 알아본다.

by 돼지왕 왕돼지 2019. 4. 25.
반응형

[android] concurrent document에 대해 알아본다.


https://www.youtube.com/watch?v=4Y3JMvbcxQE

https://developer.android.com/guide/topics/manifest/activity-element#dlmode

activity launchmode, always, Android, android:documentLaunchMode, componentName, concurrent document, data uri, documentLaunchMode, documentLaunchMode always, flag override, FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET, FLAG_ACTIVITY_LAUNCH_ADJACENT, FLAG_ACTIVITY_MULTIPLE_TASK, FLAG_ACTIVITY_NEW_DOCUMENT, google drive, intent flag, intoExisting, intoExiting, lollipop, Los, manifest, multi task, multi window, Never, None, one app multi task, onnewintent, restart, Standard, [android] concurrent document에 대해 알아본다., 동일한 데이터 인텐트


-

안드로이드 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 와 동일하다.




반응형

댓글