onDestroy()
서비스 메서드가 호출 될 때 NullPointerException
의 보고서가 표시됩니다. 내가 이해하지 못하는 부분은 항상 Context.startService()
으로 서비스를 시작하므로 항상 onStartCommand()
을 호출해야하며 참조가 null이 아니어야합니다.서비스 onDestroy는 onStartCommand없이 호출했습니다.
내가 Context.stopService()
전화로 서비스를 종료 할 때 NullPointerException
이 발생하지 않는다는 것을 언급 할 가치가 있습니다.
결론적으로이 프레임 워크는 onStartCommand()
을 호출하지 않고 onDestroy()
을 호출합니다. 나는 서비스가 파괴 될 것 같아서 프레임 워크에 의해 재시작 될 것이므로 onStartCommand()
은 실제로 실행되지 않는다. 그러나 다시, 이것은 단지 추측입니다.
여기에 무슨 일이 벌어지고 있는지에 대한 아이디어가 있으십니까? 감사!
다음은 관련 코드입니다 : mNotificationManager =의 getService (이, Context.NOTIFICATION_SERVICE) 넣어
public class ServiceLocationListener extends Service
private NotificationManager mNotificationManager;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
mNotificationManager = getService(this, Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(SOME_NOTIFICATION_ID, someNotification);
...
return START_STICKY;
}
@Override
public void onDestroy() {
mNotificationManager.cancel(SOME_NOTIFICATION_ID); <<<<<<<<< NPE
...
}
}
로컬로 재생산 할 방법이 없기 때문에 다음 릴리스에서 수정하려고 한 첫 번째 시도입니다. 그러나이 행동에 대한 통찰력은 무엇인지 알고 있습니까? –
조금 이상하지만 메모리가 문제가되어 시스템이 제대로 시작하고 즉시 파괴 할 수 없습니다. 하지만 Context.stopService()를 호출하면 nullpointer를주지 않는 것처럼 언급 한 것 같습니다. 따라서 귀하의 서비스와 같은 수단은 한 번 올바르게 실행됩니다. 권리? – Ankit
맞습니다. stopService는 잘 실행되기 때문에 onStartCommand가 (내 코드가 아닌) 호출되지 않았고 따라서 npe라는 특별한 시나리오가 있습니다. 감사! –