안녕하세요~
안드로이드를 공부하고 있습니다.
intent 에 대해서 공부하다가 ...
1) intent 를 호출할때, FLAG_ACTIVITY_NEW_TASK flag 를 주는 경우와
2) manifast 파일에 allowTaskReparenting = true, 를 해주는 경우에 대해서 차이점이 있는지 궁금하여 문의합니다.
(테스트 환경)
A app 을 A-1, A-2, A-3, B-2 로 진행되도록 app 을 만들어놓구요~
B app 을 B-1, B-2, B-3 로 진행되도록 app 을 만들어놓구...
1) A app 에서 B-2 로 진행시 FLAG_ACTIVITY_NEW_TASK flag 를 주는경우와.. (설정1)
2) B app 에서 allowTaskReparenting = true, affinity = aaa.bbb.ccc 설정후 진행하는경우에 대해서 (설정2)
테스트 해보았는데요...
(경우 1)
B app 을 B-1 에서 home 키로 빠져나오구...
A app에서 B-3 까지 진행후 home 키로 빠져나와...
B app 으로 진입할 경우 두가지 설정 모두 B-3 이 표시되고.. 이후 back 동작시 B-2, B-1 그리고 idle 로 진행되네요...
(경우 2)
B app 을 실행 시키지 않고..
외와 같이 A app 을 B-2까지 진행한뒤 home 키로 빠져나와
B app 으로 진입하면 두가지 설정 모두 B-2 가 보이고 back 동작시 idle 이 되네요...
(경우 3)
B app 을 실행 시키지 않고..
A app 을 B-3 까지 진행한뒤 home 키로 빠져나와
A app 을 진입해보면 두가지 설정 모두 .. A-3 으로 되어있네요...
제가 테스트 해볼땐... 틀린점이 없는것 같은데요..
1) 둘다 동일한 기능을 하는게 맞는지요? 틀린점은 없는지요?
아니면 제가 촛점을 잘못 맞추고 있는것인지요?
FLAG_ACTIVITY_NEW_TASK 는 app 이 있으면 해당 app 의 stack 에 쌓이고,
없으면 해당 task를 만들어서 stack 에 쌓인다고 하던데....
A app 에서 B-3 까지 진행하게되면... B-2 는 B app stack에 쌓일것으로 예상되는데요...
그럼 A app 으로 B-3 까지 진행한 뒤의 back 은
적어도 ... (B-3) -> A-3 -> A-2 -> A-1 -> idle (A app 으로 진행)
혹은 (B-3) -> B-2 -> idle 로 진행되어야 맞는것 아닌가요? (B app 으로 진행)
그런데.. 실제론 (B-3) -> B-2 -> A-3 -> A-2 -> A-1 -> idle 이더라구요... A app 이 B app 의 stack 를 참조하는건지.. ??
2) 제가 잘못 이해하고 있는건가요?
allowTaskReparenting = true 의 경우 해당 affinty가 같은 app 이 front 로 나올경우
그때 stack 이동 한다던데...
A app 에서 B-3 까지 이동후, B app 실행 시키지 않고, 다시 A app 에 진입하게되면...
B app 이 front 로 나온것도 아닌데.. B-3, B-2가 사라지고 A -3 이 나오던데...
(추후 A app 진입해보면, A app stack에 존재함을 알수 있음)
그럼 front 를 불문하고 affinity 가 같은 task 에 붙던지 생성후 붙던지 하는 것이자나요~
3) 이것두 제가 잘못 이해하고 있는건가요?
누구 명확한 답좀 부탁드려요~~~
펍스 님들 ~~ 알려주세요~
구체적으로 어떻게 동작하고 어떻게 다른지에 관한 점은... 저렇게 비교할순 없을거 같습니다.
affinity 설정이 주는 영향을 한번 리포트 해보고
FLAG가 주는 영향을 한번 리포트 하는거죠...
그래서 어떤 경우에 affinity 설정을 바꿔서 쓰고
또 어떤경우에는 FLAG를 바꿔서 쓰고.... 둘을 같이 쓸수도 있으므로 어떨때 그렇게 하는건지...
이런 결론을 도출해야 저런 실험이 의미가 있을거라 생각합니다.
지금 다시 테스트 해보니...
B app 이 진행된 상태에서는 동일한 결과를 가져다 주는데...
B app 이 진행되지 않은 상태에서는
FLAG_ACTIVITY_NEW_TASK flag 는 New Task 가 되고... allowTaskReparenting = true 는 New Task 가 되지 않는것 같네요..
affinity 의 경우는 주던 않주던 별 영향을 주지 못하는것으로 보입니다만...?
(명시적으로 주지 않더라도... 디폴트값이 존재하여 app 마다 있는것 아닌가요? affinity 를 "" (NULL) 로 주지 않는한 동일한것 같은데...??)
혹시 이런 테스트나 참조할만한 URL 같은건 없을까요?
애초의 테스트 케이스가 좀 잘못되지 않았나 싶은데요...
A app은 그냥 두고
B app에서 메니피스트 affinity 설정을 넣고 테스트, 빼고 테스트....
이런식이 되어야 되지 않을까요?
B app의 메니피스트 affinity 설정은 무조건 고정해두고 저런 테스트를 하는건 전혀 의미가 없어보입니다.
결과가 같게 나오는게 오히려 당연해보이는데요...