使用Intent Actions时stopService崩溃应用程序

时间:2012-10-31 16:09:47

标签: android service

我已经编写了一个服务,该服务将按小时运行长期向服务器发送位置更新。如果用户不想发送位置更新,那么他将在应用中关闭。所以我开始服务(在第一个Activity中)并且想要停止已经从另一个Activity运行服务。所以我刚刚在Manifest文件中声明了对Service的操作,如下所示。

<service android:name=".services.LocationService" android:process=":bgservice">
    <intent-filter >
       <action android:name="com.example.STOP_LOC_SERVICE"/>
       <action android:name="com.example.START_LOC_SERVICE"/>
   </intent-filter>  
</service>

这里我希望我的服务无论应用程序进程如何都要运行,所以我通过指定:bgservice来获取单独的服务名称。这是否意味着我的服务是远程服务。若是,这会产生以下问题。

然后使用以下代码在Service类中启动和停止服务。

@Override
public int onStartCommand(Intent intent, int flags, int startId) 
{
    if(intent.getAction().equals("com.example.STOP_LOC_SERVICE"))
    {    // means that you have envoked action that will has to stop the service
                LocationService.this.stopSelf();   
    }
    else
    {
        return super.onStartCommand(intent, flags, startId);
    }
    return START_STICKY;
}

在行

下启动服务
Intent istart = new Intent("com.example.START_LOC_SERVICE");
    startService(istart);

停止服务以下行

Intent istop = new Intent("com.example.STOP_LOC_SERVICE");
    startService(istop);

大多数设备上的一切正常。我已经在各种设备上测试了该服务。但最近我在Service的OnStartCommand()中得到了一个N​​ullPointerException。我无法找到该方法中的null。希望Intent为null,但如果intent为null,那么可以如何调用service。所有设备都没有出现此问题。

先谢谢。

错误发生在onstartcommand

中的if循环中

logcat的:

java.lang.RuntimeException: Unable to start service com.example.services.LocationService@410e5be8 with null: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2376)
at android.app.ActivityThread.access$1900(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.services.LocationService.onStartCommand(LocationService.java:53)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359)
... 10 more

0 个答案:

没有答案