我已经编写了一个服务,该服务将按小时运行长期向服务器发送位置更新。如果用户不想发送位置更新,那么他将在应用中关闭。所以我开始服务(在第一个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()中得到了一个NullPointerException。我无法找到该方法中的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