본문 바로가기
인간적인 개발자/문제해결

Service stopService() 불렀을 때 onDestroy()가 작동하지 않거나 원하는 타이밍에 작동안할떄

by baeflower 2015. 5. 15.

Service


안드로이드의 Service는 startService 또는 bindService로 Service를 시작할 수 있다

bindService 시 flag를 어떤 것을 사용하는지 어디서 startService가 시작되는지에 따라 다양한 경우가 발생한다


이중 stopService 실행 시 onDestory()를 바로 타게 하고 싶으면 bindService에서 사용하는 flag를 변경하면 된다


기존에 bindService에서 썼던 flag는 Context.BIND_AUTO_CREATE 였는데 이것을 Context.BIND_ADJUST_WITH_ACTIVITY 로 수정했다

그랬더니 잘 작동한다!


BIND_ABOVE_CLIENT : 서비스에 바인딩된 client application이 app 자체보다 바인딩한 service가 더 중요하다고 하는 것. 이게 세팅되면, 플랫폼은 연결된 서비스를 kill 하기 전에 out of memory killer가 앱을 먼저 kill 하도록 시도할 것이다. 


BIND_ADJUST_WITH_ACTIVITY : activity로부터 서비스가 바인딩되면, 타겟 서비스의 프로세스 중요성이 유저에게 보이는 액티비티가 보이는지 안보이는지에 기반하여 올라갈 것이다. 다른 플래그가 클라이언트 프로세스의 전체적인 중요성이 프로레스에 영향을 미치는 양을 줄이려고 하더라도(?)


BIND_ALLOW_OOM_MANAGEMENT : 


BIND_AUTO_CREATE :



... 

여기서 더 많은 flag에 대한 설명을 볼 수 있다!


http://developer.android.com/reference/android/content/Context.html  



댓글