1

我编写了一个服务,它将运行长时间的每小时向服务器发送位置更新。如果用户不想发送位置更新,那么他将在应用程序中关闭。所以我正在启动服务(在第一个 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
4

0 回答 0