엑티비티 A, B가 있습니다.

 

A가 최초 실행시 불리는 MainActivity라고 가정하고

 

A 엑티비티는 onCreate에서 이것저것 필요한 init을 해주고

 

작업이 완료되면 B라는 엑티비티로 넘겨줍니다....

 

이때 startActivityForResult로 B엑티비티를 실행하고

 

B엑티비티는 백버튼을 누르면 종료하시겠습니까? 묻는 팝업이 뜨고

 

확인버튼을 누르면 setResult(RESULT_OK):를 해주고 finish();를 호출하여

 

A 엑티비티도 함꼐 종료가 되며 정상 종료가 되도록 구현하였습니다.

 

그리고 B 이하의 모든 엑티비티는 무조건 B로 돌아와야만 종료하게끔 구현 되어있고,

 

강제종료를 해야할 경우엔 B 엑티비티를 CLEAR_TOP 플래그를 주어 실행한 뒤

 

B엑티비티의 onNewIntent()에서 setResult를 해주고 finish()를 호출하도록 하여 종료하였습니다...

 

A엑티비티와 B엑티비티는 둘 다 singleTop 속성을 주었구요....

 

 

 

 

정상 작동시엔 문제없이 돌아가는데... 이것이 킬앱과 조합되니... 문제를 일으키네요....

 

A 엑티비티가 킬앱이 될 떄 Destroy 되고 B 엑티비티에서 finish()로 종료될 때 A 엑티비티는 onCreate가 호출되며

 

가장 초반부에 설명한대로 여러가지 init 류를 실행 한 뒤 init이 완료되면 다시 B를 호출합니다....

 

그러니까 onActivityResult가 호출되기 전에 onCreate에서 앱 최초 실행시 진행하는 작업들을 진행하네요...

 

쉽게 말해 "종료불가" "무한 재실행"..........

 

그래서 protected void onSaveInstanceState(Bundle saveBundle) 를 이용하여 OS kill 이 일어났거나 kill 앱으로 죽었을 경우

 

boolean 값을 하나 저장하도록 하고 onCreate에서 그 값을 얻어와 bool 값이 true 일 경우 킬앱 되고 난 뒤의 onCreate라 판단하고

 

finish()하도록 구현하니 킬앱 작동 후에도 종료가 잘 되었습니다...

 

근데 하나의 문제가 또 생겼습니다.. ㅠ

 

킬앱 후에 푸시 메세지를 받아서 상단 노티바를 내려서 해당 메세지를 클릭하면

 

A엑티비티의 onNewIntent를 거쳐서 B엑티비티로 가고 B 엑티비티에서 푸시 type에 해당하는 엑티비티로 넘겨주게 되어있는데...

 

킬앱 또는 OS에 의해 죽어버린 A 엑티비티는 onNewIntent가 호출 되기전에 onCreate가 먼저 호출되어서 

 

OKKill boolean 값이 true로 기록되어있어서 그냥 앱을 종료시켜 버리네요....

 

이거 뭔가 두서없이 썼는데....

 

 

 

위와같은 문제가 있는데 저의 앱 종료 방식이 잘 못된 건지 궁금합니다...

 

카카오톡으로 저에게 생긴 문제들을 하나하나 다 그대로 테스트 해보았는데 카톡은 잘 되더라구요 ㅠ_ㅠ 흑흑...