0

在 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
4

2 回答 2

0

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

If you want to stop your service if intent doesn't contain appropriate data, call stopSelf().

于 2013-03-30T13:47:53.980 回答
0

START_REDELIVER_INTENT seems to have solved the error for anyone having similar issue

于 2013-03-30T15:46:22.027 回答