IntentService onHandleIntent (Intent) получает нулевой аргумент

Я использую IntentService для запуска фоновой службы для моего приложения на Android. Как ни странно, я получаю много сообщений о сбоях с случаями, когда намерение, переданное onHandleIntent, равно null. Я даже не уверен, как это возможно и кажется крайне странным. Может ли кто-нибудь предположить, почему это может произойти?

ТРАССИРОВКИ СТЕКА

java.lang.NullPointerException at com.example.MyService.onHandleIntent(MyService.java:466) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.os.HandlerThread.run(HandlerThread.java:61) 

Строка № 466 в моем файле службы, где исключение нулевого указателя:

 465 protected void onHandleIntent(Intent intent) { 466 Bundle data = intent.getExtras(); 

Служба запускается как:

 serviceIntent = new Intent(this, MyService.class); serviceIntent.putExtra("ip", ip); serviceIntent.putExtra("port", port); startService(serviceIntent); 

Изменить: теперь я понимаю, что я могу злоупотреблять IntentServices. Когда я запускаю службу, я запускаю некоторые рабочие потоки из onHandleIntent (), которые продолжают работать даже после возвращения onHandleIntent (). И связываться с потоками, привязывая к службе и вызывающим функциям / обратным вызовам. Я рассмотрю использование лучшего способа использования сервисов для этой цели, тем временем я до сих пор не понимаю, как переданное намерение является нулевым. Я могу только подозревать, что Android-система сама вызывает onHandleIntent с нулевым намерением, который кажется еще странным. Может кто-нибудь объяснить, почему система Android может называть ее таким образом?

Solutions Collecting From Web of "IntentService onHandleIntent (Intent) получает нулевой аргумент"

См. Документацию по Android для IntentService.onStartCommand .

[Цель] может быть нулевой, если служба перезапускается после того, как ее процесс ушел, и она ранее возвращала что-либо, кроме START_STICKY_COMPATIBILITY.

Поведение перезапуска можно в некоторой степени контролировать с помощью IntentService.setIntentRedelivery

Я также получал нулевой onHandleIntent внутри onHandleIntent . И причина в том, что я принимал в этом намерении целый предмет. Я не мог понять причину, но я получил ее работу после того, как не прошел мимо приемлемого объекта.