【问题标题】:dealing with service being destroyed处理服务被破坏
【发布时间】:2013-03-30 12:59:44
【问题描述】:

在 UI 线程上运行一个服务,这不是我的第一个方法,我有更多时间来使用 android 和 JAVA,但没有时间对其进行排序。

我认为问题是当系统破坏它尝试重新启动的服务但启动它时发送的原始意图导致空指针异常不知道我是否应该做一些事情来保存活动实例或做一些事情在服务中解决问题。

如果我能避免多线程,那就寻找最轻松的方法来确保它现在重新启动。下面的代码部分有导致问题的行。

对 log-cat 格式感到抱歉

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "started");

    if(deviceId==null){
        Log.d(TAG, "in if");
        deviceId=intent.getStringExtra("device_id");
        contact=intent.getStringExtra("carers_num");
    }

    Log.d(TAG, "num =" +contact);
    Log.d(TAG, "id = "+deviceId);

    if(deviceId.equalsIgnoreCase("carersD")){
        Log.d(TAG, "The carers device has been selected");

    }else if (deviceId.equalsIgnoreCase("patientsD")) {

        Log.d(TAG, "The patients device has been selected");
        registerListener();
    }

    return START_STICKY; 
} 


03-30 13:03:23.983: E/AndroidRuntime(25132): FATAL EXCEPTION: main
03-30 13:03:23.983: E/AndroidRuntime(25132): java.lang.RuntimeException: Unable to start service com.sblyit.finder.LocationService@41f6ee18 with null: java.lang.NullPointerException
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2571)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.app.ActivityThread.access$2000(ActivityThread.java:140)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1334)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.os.Looper.loop(Looper.java:137)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.app.ActivityThread.main(ActivityThread.java:4921)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at java.lang.reflect.Method.invokeNative(Native Method)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at java.lang.reflect.Method.invoke(Method.java:511)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at dalvik.system.NativeStart.main(Native Method)
03-30 13:03:23.983: E/AndroidRuntime(25132): Caused by: java.lang.NullPointerException
03-30 13:03:23.983: E/AndroidRuntime(25132):    at com.sblyit.finder.LocationService.onStartCommand(LocationService.java:83)
03-30 13:03:23.983: E/AndroidRuntime(25132):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2554)
03-30 13:03:23.983: E/AndroidRuntime(25132):    ... 10 more

【问题讨论】:

    标签: android android-intent service location


    【解决方案1】:

    如果您不想重启服务,请返回START_NON_STICKY

    如果您想在意图不包含适当数据的情况下停止服务,请致电stopSelf()

    【讨论】:

    • 问题是我确实希望它重新启动,但是当它尝试时我也遇到了错误。我认为这与意图的内容在它被破坏时丢失导致尝试重新启动时执行空指针有关
    • 这是我回答的第二部分。
    • 我使用了 START_REDELIVER_INTENT 我在您的回答中没有看到这一点。如果有什么我想念的东西,请告诉我。我只看到 START_NON_STICKY 和 stopSelf() 两者都与我试图做的相反。
    【解决方案2】:

    START_REDELIVER_INTENT 似乎已经解决了任何有类似问题的人的错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2016-02-29
      • 2018-08-31
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 2013-05-19
      相关资源
      最近更新 更多