본문 바로가기

Android

Android Manifest의 launchMode

오늘 아침 연락을 받았다.

내가 개발한 광고 SDK에서 버그가 발견되었다는 것이다ㅠㅠ

물론 버그없는 프로그램은 없지만......가슴이 아프다

어떠한 버그인지 확인하니 다음과 같았다.


앱실행 -> 광고실행 -> 광고시청중 홈버튼으로 바탕화면 -> 바탕화면에서 멀티태스킹버튼으로 광고진입 -> 광고 이어서 재생 -> 시청 완료 -> 광고 종료 후 바탕화면(?)


참 어렵다.... 뭔놈의 상황인지...


우선 현상을 보니 Manifest의 문제로 예상. 가장 의심스러운 launchMode를 확인하니... singleInstance!!


이것 때문에 광고가 새로운 Task로 인식이 되어, 광고가 끝나니 다시 배경화면으로 이동된 것이다. 그래서 singleTask로 변경하니 앱과 광고가 하나의 Task로 인식이 되어 정상적로 실행됨.


이 기회에 launchMode에 대해 공부하자


launchMode는 말 그대로 실행될 모드이며, 종류로는 4가지가있다.


standard (default) : intent를 할때마다 Activity를 새로 생성한다.

singleTop : intent를 할때마다 activity를 새로 생성하나, 동일한 Activity가 top에 있을 경우 새로 생성하지 않고 기존에 있던 Activity를 호출, 

생명주기는 onPause -> onNewIntent -> onResume


위에 2가지 모드와 반대로 아래 2개는 하나만 생성되는 옵션이다.

singleTask : 하나의 Activity만 생성이 되나, 다른 Activity가 해당 태스크의 일부가 되는 것을 허용한다.

singleIntance : 이 옵션도 Task와 비슷하나, 그 어떤 Activity와도 섞이지 않고 유일한 Activity로 동작한다. 즉 A액티비티에서 B(singleInstance)액티비티를 Intent하면 멀티태스킹버튼을 눌렀을 때 A와 B액티비티가 뜬다.(A와 B가 하나의 앱임에도 불구하고)



결국 버그는 광고sdk가 singleInstance로 되어있기 때문에

홈버튼 -> 광고시청 -> 광고종료 했을때 바탕화면으로 돌아갈수밖에 없는 구조여서 발생했다.


singleInstance일때 : 앱 -> 광고 -> 홈버튼 -> 광고 -> 광고종료 -> 바탕화면

singleTask일때 : (앱/광고) -> 홈버튼 -> (앱/광고) -> 광고종료 -> (앱)


singleTask로 하니 앱과 광고가 하나의 task로 인식되어 홈버튼 -> 광고->광고종료->앱 으로 돌아가게 되었다.