본문 바로가기

프로그래밍/안드로이드

[안드로이드/Android] android:launchMode="singleTask" 와 액티비티간의 통신, startActivityForResult 에 대한 여러가지 삽질들.

android:launchMode="singleTask", startActivityForResult


프로그램 실행 순서 (알파벳은 모두 Activity로 작성)
A->B-> Home key ->A ->C -> Back Key ->C->Back Key->B->Back key->A

프로그램을  실행하여서 위와 같은 순서로 실행하면 home키를 눌렀을 시에 스택에 Activity가 남아 있는 것 같고 다시 해당 app을 실행하면 좀전에 실행한 화면이 보인다. 

이때, app이 처음부터 실행되게 하고 싶은 경우 아래와 같은 방법으로 처리가 가능하다. 

manifest파일(AndroidMenifest.xml) 에 정의된 각 <Activity ... >태그에  

                  android:launchMode="singleTask"

                  android:clearTaskOnLaunch="true"

[출처 : http://journae.springnote.com/pages/6834213]


여기서 부터 삽질이 시작되었습니다.
액티비티 간에 값을 서로 전달 받기 위해 아래의 두 메소드를 활용하여 진행을 합니다.

startActivityForResult(Intent t, int requetCode);
onActivityResult(int requestCode, int resultCode, Intent data)


하지만 호출되는 Activity가 manifest파일에 adnroid:launchMode="singleTask"가 걸려있다면 아마 호출할때 onActivityResult() 메소드가 호출되는걸 아실수가 있을 겁니다. 

마찬가지로 호출된 Activity가 종료될때 호출되어야 할 onActivityResult()는 호출되지 않는 답니다. 

왜그런지는 모르겠으나 몇일의 삽질 결과(사실 찾지를 못하여 혼자서 이리저리 고치며 고생한 거랍니다.) 호출당하는 클래스는 manifest파일에서 android:launchMode="singleTask"를 삭제하니 정상적으로 동작이 하더군요

혹시 저와 같이 삽질 하시는 분들은 참고하세요.