gpt4 book ai didi

android - 服务 onStartCommand 抛出 NullPointerException

转载 作者:行者123 更新时间:2023-11-30 02:56:43 25 4
gpt4 key购买 nike

我有一个运行两个独立服务的应用程序。其中一个运行平稳,另一个大部分时间都没有问题,但抛出一个 NullPointerExceptiononStartCommand() 内在 4.1 和 4.4.2 之间的不同 Android 版本上间歇性地出现在大量较新的设备(三星、HTC、LG)上。我无法在我自己的任何设备上重现该错误,包括遇到此问题的两个确切型号。 stacktrace如下,说明问题出在145行:

java.lang.RuntimeException: Unable to start service com.mycom.myapp.MyLocService@425ab718
with Intent { cmp=com.mycom.myapp/.MyLocService }: java.lang.NullPointerException
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2695)
at android.app.ActivityThread.access$1900(ActivityThread.java:146)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1337)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5168)
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:797)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.mycom.myapp.MyLocService.onStartCommand(MyLocService.java:145)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2678)
... 10 more


我正在使用提供的答案中链接的部分代码 here通过 blackcj在我的应用程序后台运行定位服务;这是 MyLocService.java 中的相关 fragment ,其中违规行标记为:

@Override
public void onCreate() {
super.onCreate();

mInProgress = false;
mLocationRequest = LocationRequest.create();

servicesAvailable = servicesConnected();
mLocationClient = new LocationClient(this, this, this);
locIntent = new Intent(MY_LOCATION);
}

public int onStartCommand (Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId); // <----- NPE AT LINE 145

setUpLocationClientIfNeeded();

if(!mLocationClient.isConnected() || !mLocationClient.isConnecting()) {
mLocationClient.connect();
}

return START_STICKY;
}

private void setUpLocationClientIfNeeded() {
if(mLocationClient == null) {
mLocationClient = new LocationClient(this, this, this);
}
}


该服务由 onCreate() 中的以下代码启动在 MyActivity.java 中:

Intent MyLocService = new Intent(this, MyLocService.class);     
startService(MyLocService);


该服务在 <application> 中声明AndroidManifest.xml 中的元素如下:

    <service
android:name=".MyLocService"
android:singleUser="true"
android:stopWithTask="false" >
<intent-filter>
<action android:name="com.mycom.myapp.MyLocService" />
</intent-filter>
</service>


我一直无法确定是什么导致了这个异常,因为它不会一直发生,而且我自己也无法重现。是什么导致了这个间歇性问题?

最佳答案

似乎返回 START_REDELIVER_INTENT 而不是 START_STICKY 已经解决了这个问题。我没有继续弄清楚如何检查 null Intent ,而是找到了一种据称不会首先导致它的方法。

随着我的用户越来越广泛地实现此方法,我将更新我发现的关于此方法的任何进一步结论。

关于android - 服务 onStartCommand 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23148677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com