我的問題可能是服務的誤解和我對它們的使用,或者與其他應用程序的位置衝突。當我開始一個特定的活動時,我開始了兩個後臺服務 - 定位跟蹤以提供距離,以及已經過的計時器,這兩個服務都通過BroadcastReceiver
傳遞給活動。我開始通過Intent
對象與Long
每個服務從我小學Activity
:導致崩潰的後臺服務
if (!Utils.isServiceRunning(this, TrackService.class)) {
Intent i = new Intent(this, TrackService.class);
i.putExtra("SUB_ID", submissionID);
startService(i);
}
而且我用下面的代碼來檢測,如果該服務已在運行:
public static boolean isServiceRunning(Activity activity, Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
的onStartCommand
的例子如下:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
submissionID = intent.getLongExtra("SUB_ID", 0L);
// I then use this submissionID to get other data
super.onStartCommand(intent, flags, startId);
return START_STICKY;
}
在某些設備上,這似乎完美工作 - 服務(S)工作ks在後臺,允許我在應用程序中使用其他活動&也可以進出應用程序,當我下次打開我的特定活動時,距離和時間會更新並更正。
但是,我收到很多崩潰報告,並且用戶的傳聞證據表明它在甩掉我的應用程序以使用相機之後(我尚未確定在使用其他應用程序時是否發生了崩潰應用程序,或者當他們重新進入我的應用程序):
Fatal Exception: java.lang.RuntimeException: Unable to start service [email protected] with null: java.lang.NullPointerException: Attempt to invoke virtual method 'long android.content.Intent.getLongExtra(java.lang.String, long)' on a null object reference
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3149)
at android.app.ActivityThread.access$2500(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1515)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5669)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'long android.content.Intent.getLongExtra(java.lang.String, long)' on a null object reference
at edu.cornell.birds.ebird.services.TrackService.onStartCommand(TrackService.java:102)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3112)
at android.app.ActivityThread.access$2500(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1515)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5669)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
在我看來,由於某種原因該服務被停止和重新啓動不能從目的訪問數據時(我的理解一個空指針錯誤是什麼)。這是因爲我返回START_STICKY
它在重新啓動時返回空數據?
有誰知道服務應該停止的任何原因嗎?我怎樣才能防止這種情況發生?
我無法重新使用我自己的設備(Moto G4,Android 7.0),它的工作原理與我所希望的一樣。
你的'TrackService'類中有一個NullPointer在行號** 102 ** – SripadRaj
可能重複[什麼是NullPointerException,我該如何解決它?](https://stackoverflow.com/questions/218384)/what-is-a-nullpointerexception-and-how-do-i-fix-it) – SripadRaj
我的主要問題是「爲什麼服務應該停止」,這導致了NullPointer(我知道它是什麼)。 – iaindownie