지정된 시간마다 Toast를 띄우는 서비스 프로그램을 작성하고
엑티비티에서 startService()로 서비스를 켰을때.
원래 대로라면 stopService()를 호출하기전까지 서비스는 계속 돌아야하는걸로 알고있는데
① 액티비티에서 startService()로 서비스를 호출하여 서비스를 구동 시킨뒤 실행중인 프로그램 목록에서 종료를 누르면
서비스도 함께 종료가 됩니다.
원래 의도는 엑티비티만 종료되고 서비스는 백스라운드에서 계속 돌길 원하는데 같이 죽네요.
② 환경설정 -> 응용프로그램 -> 실행중인서비스 -> 서비스 종료
- 이번 경우는 질문을 올리면서 해결을 했습니다. 맞는 방법인지는 모르겠습니다. ㅠ
서비스가 종료되는 시점(onDestory())에서 다시 서비스를 실행하도록 한다.
public class SimpleService extends Service {
final String LOG_TAG = "SimpleService----------------";
boolean m_quit;
...
@Override
public void onDestroy() {
super.onDestroy();
m_quit = true;
Log.e(LOG_TAG, "onDestroy()");
// 서비스를 종료해도 바로 다시 실행 시킨다.
Intent intent = new Intent(SimpleService.this, SimpleService.class);
startService(intent);
}
}
질문글을 작성하던중 2번에 대한 방법은 해결을 했는데 1번에 대한 해결책은 아직 못찾았습니다.
혹시 아시는분 힌트좀 부탁드립니다.
일단 2번 같은 경우 서비스 종료할때 해당 서비스의 onDestory() 메서드가 호출된다면
onDestory() 메서드에서 서비스 재시작이 가능합니다. 이건 해결 하셨으니..
그러나, 실행중인 앱 목록에서 종료할 경우라면...
메모리에 백그라운드로 남이 았는 앱을 강제로 삭제하는 것으로,
앱 및 서비스의 onDestory() 메서드가 호출되지 못한 상태에서 메모리에서 삭제되어 버립니다.
때문에 앱 자체적으로 나 죽는구나 라는 것을 알 수 없기 때문에 정상적인 방법으로 재시작 할 수 있는 방법이 없습니다. ^^a
만일 알람메니저를 이용해 일정 시간 간격(1시간 등..)으로 서비스를 재시작하게 한다해도
앱이 강제 종료되면서 알람메니저도 같이 죽어 버리기 때문에.. 이 또한 소용 없습니다. ^^a
저도 앱 위젯 만들면서 이 문제 때문에 고민이 많지만, 아직 마땅한 해결책은 찾질 못한 상태네요.. 에구구..



