我编写了一个服务,它将运行长时间的每小时向服务器发送位置更新。如果用户不想发送位置更新,那么他将在应用程序中关闭。所以我正在启动服务(在第一个 Activity 中)并希望停止已经从另一个 Activity 运行的服务。所以我只是在 Manifest 文件中声明了对服务的操作,如下所示。
<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);
在大多数设备上一切正常。我已经在多种设备上测试了该服务。但最近我在服务的 OnStartCommand() 中遇到了 NullPointerException。我无法在该方法中找到 null 的内容。希望 Intent 为空,但如果 Intent 为空,那么如何调用服务。此问题并非出现在所有设备上。
提前致谢。
错误出现在 onstart 命令中的 if 循环
日志猫:
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