2

ich einen Absturz in Crashlytics sehen:Android IntentService ausgelöst mit null Absicht

Fatal Exception: java.lang.NullPointerException: Versuch virtuelle Methode ‚int android.content.Intent.getIntExtra aufzurufen (java.lang.String, int)‘auf null Objektreferenz bei com.myapp.APKOfferQueueManagerIntentService.onHandleIntent (Source: 71) bei android.app.IntentService $ ServiceHandler.handleMessage (IntentService.java:65) bei Android .os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper. java: 135) bei android.os.HandlerThread.run (HandlerThread.java:61)

Wie kann es sein, dass ein IntentService mit einer Null-Absicht ausgelöst wird?

+0

Haben Sie onStartCommand im Dienst aufgerufen? – Krutik

+0

Nein, ich habe onStartCommand nicht hinzugefügt. – JY2k

Antwort

2

Ein IntentService kann wie jeder andere Dienst gestoppt werden, aber es wird von "dem System" neu gestartet, bis onHandleIntent() seine Arbeit beendet hat. In diesem Fall sagt die documentation die Absicht Parameter

... kann null sein, wenn der Dienst neu gestartet wird, wird nach dem Prozess entfernt

gegangen ist

Um immer das Original Intent als bekommen Parameter verwenden

setIntentRedelivery(true); 

im Konstruktor des IntentService.

Beachten Sie auch, dass

Wenn mehrere Intents gesendet wurden, nur die jüngste ist garantiert nachgeliefert werden.

+0

Das klingt nach der Lösung. Gibt es eine Möglichkeit, dass ich simulieren kann, dass ein intentService abrupt getötet und dann erneut aufgerufen wird? Ich möchte die Lösung überprüfen. – JY2k

+0

@ JY2k - Ich würde etwas wie eine [Task Killer-App] versuchen (https://github.com/commonsguy/cw-omnibus/tree/master/Tasks/Nukesalot) - oder vielleicht auch [SO post by Xavi Gil] (http://stackoverflow.com/a/26253635/5015207) wird nützlich sein – 0X0nosugar