2014-03-05 57 views
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 
     ... 
    } 
} 

回答

0

把mNotificationManager =的getService(這一點,Context.NOTIFICATION_SERVICE);在onCreat()服務。

+0

對,這是我第一次嘗試在下一個版本中修復它,因爲我沒有辦法在本地重現它。但是,你知道這種行爲的見解是什麼嗎? –

+0

有點奇怪,但可能存在內存問題,系統不允許立即正確啓動和銷燬它。但我想你提到,如果調用Context.stopService()它沒有給予空指針。所以它的意思就像你的服務一次正常運行。對? – Ankit

+0

right,stopService被執行得很好,所以有一些特殊的情況,onStartCommand沒有被調用(不在我的代碼中),因此也是npe。謝謝! –

相關問題