0
當onDestroy()
服務方法被調用時,我收到NullPointerException
的報告。我不明白的部分是我總是以Context.startService()
開始服務,因此應該始終調用onStartCommand()
,並且引用不應爲空。沒有onStartCommand的服務onDestroy調用
值得一提的是,當我用Context.stopService()
調用關閉服務時,NullPointerException
不會發生。
所以我的結論是,框架調用onDestroy()
而不叫onStartCommand()
。我猜服務可能會被銷燬,並被框架重新啓動,所以onStartCommand()
實際上並沒有被執行。但是,這只是我猜測。
關於可能會發生什麼的任何想法?謝謝!
下面是相關代碼:
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()它沒有給予空指針。所以它的意思就像你的服務一次正常運行。對? – Ankit
right,stopService被執行得很好,所以有一些特殊的情況,onStartCommand沒有被調用(不在我的代碼中),因此也是npe。謝謝! –