没有onStartCommand就调用了onDestroy服务

时间:2014-03-05 12:59:13

标签: android android-service android-lifecycle

我在调用NullPointerException服务方法时收到onDestroy()的报告。我不理解的部分是我总是使用Context.startService()启动服务,因此应始终调用onStartCommand()并且引用永远不应为null。

值得一提的是,当我通过NullPointerException调用关闭服务时,Context.stopService()不会发生。

所以我的结论是框架在没有调用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
        ...
    }
}

1 个答案:

答案 0 :(得分:0)

把mNotificationManager = getService(this,Context.NOTIFICATION_SERVICE);在onCreat()服务。