处理被破坏的服务

时间:2013-03-30 12:59:44

标签: android android-intent service location

在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

2 个答案:

答案 0 :(得分:0)

如果您不希望重新启动服务,请返回START_NON_STICKY

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

答案 1 :(得分:0)

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