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