Почему я не могу использовать Context.getPackageManager внутри конструктора Service

Если я попытаюсь использовать его, я получаю NullPointerException . Если он выведен из конструктора, он работает нормально. Итак, мне любопытно, что происходит.

Вот код:

 package com.example.nullptrservice; import android.app.Service; import android.content.Intent; import android.content.pm.PackageManager; import android.os.IBinder; import android.util.Log; public class MyService extends Service { public MyService() { super(); PackageManager pm = this.getPackageManager(); } @Override public int onStartCommand(Intent intent, int flags, int startId){ Log.i("MyService", "---------- started --------"); return Service.START_NOT_STICKY; } @Override public IBinder onBind(Intent intent) { return null; } } 

И это вывод logcat, когда я запускаю службу вручную:

 D / AndroidRuntime (4174): 
 D / AndroidRuntime (4174): AndroidRuntime START com.android.internal.os.RuntimeInit 
 D / AndroidRuntime (4174): CheckJNI выключен
 D / AndroidRuntime (4174): Вызов основной записи com.android.commands.am.Am
 D / dalvikvm (4184): Поздняя учетная запись CheckJNI
 D / AndroidRuntime (4174): выключение виртуальной машины
 I / ActivityManager (148): Запустите proc com.example.nullptrservice для службы com.example.nullptrservice / .MyService: pid = 4184 uid = 10066 gids = {}
 I / AndroidRuntime (4174): ПРИМЕЧАНИЕ: присоединение потока «Binder Thread № 3» не выполнено
 D / dalvikvm (4174): GC_CONCURRENT освобожден 103K, 81% бесплатно 489K / 2560K, приостановлено 1 мс + 1 мс
 D / jdwp (4174): Получил сигнал пробуждения, освобождающийся от выбора
 D / dalvikvm (4174): Отладчик отключен;  У объекта реестр было 1 запись
 D / AndroidRuntime (4184): выключение виртуальной машины
 W / dalvikvm (4184): threadid = 1: поток, выходящий с неперехваченным исключением (group = 0x409ee1f8)
 E / AndroidRuntime (4184): FATAL EXCEPTION: главная
 E / AndroidRuntime (4184): java.lang.RuntimeException: невозможно создать экземпляр сервиса com.example.nullptrservice.MyService: java.lang.NullPointerException
 E / AndroidRuntime (4184): at android.app.ActivityThread.handleCreateService (ActivityThread.java:2237)
 E / AndroidRuntime (4184): at android.app.ActivityThread.access $ 1600 (ActivityThread.java:123)
 E / AndroidRuntime (4184): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1201)
 E / AndroidRuntime (4184): на android.os.Handler.dispatchMessage (Handler.java:99)
 E / AndroidRuntime (4184): на android.os.Looper.loop (Looper.java:137)
 E / AndroidRuntime (4184): at android.app.ActivityThread.main (ActivityThread.java:4424)
 E / AndroidRuntime (4184): при java.lang.reflect.Method.invokeNative (собственный метод)
 E / AndroidRuntime (4184): в java.lang.reflect.Method.invoke (Method.java:511)
 E / AndroidRuntime (4184): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:784)
 E / AndroidRuntime (4184): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:551)
 E / AndroidRuntime (4184): в dalvik.system.NativeStart.main (собственный метод)
 E / AndroidRuntime (4184): вызвано: java.lang.NullPointerException
 E / AndroidRuntime (4184): at android.content.ContextWrapper.getPackageManager (ContextWrapper.java:86)
 E / AndroidRuntime (4184): at com.example.nullptrservice.MyService. (MyService.java:12)
 E / AndroidRuntime (4184): в java.lang.Class.newInstanceImpl (собственный метод)
 E / AndroidRuntime (4184): в java.lang.Class.newInstance (Class.java:1319)
 E / AndroidRuntime (4184): at android.app.ActivityThread.handleCreateService (ActivityThread.java:2234)
 E / AndroidRuntime (4184): ... еще 10

Android 4.0.3

Также есть куча связанных вопросов здесь, на SO

Вы не можете использовать Service (или действие в этом случае) в качестве Context когда объект создается / инициализируется.

Вместо этого переопределите onCreate() и выполните свою инициализацию там и избавьтесь от явного конструктора.

Попробуйте использовать обработчик из onCreate () или конструктора службы и выполняйте свою работу внутри обработчика.

Intereting Posts
Не нажимается, если приложение закрыто API Карт Google v2 нарисовать часть круга на MapFragment Как предотвратить отображение строки состояния и панели навигации во время перехода анимации сцены активности? Android в приложении биллинга с использованием внешнего платежного процессора Внедрение многоколоночного ListView с независимыми строковыми строками Защитить приложение для Android от пиратства Поддерживает ли Android почти в режиме реального времени push-уведомление? WebView вызывает Uncaught TypeError при загрузке www.google.com. Отказ от разрешения Android, если другое приложение не установлено первым Picasso java.lang.IllegalStateException: вызов метода не должен происходить из основного потока Устаревший Plus.PeopleApi.load Java.lang.ClassCastException: android.app.ContextImpl Библиотека поддержки Android 23.4.0: android.support.v7.widget.TintContextWrapper не может быть перенесена в Activity Как правильно реализовать Parcelable с ArrayList <Parcelable>? Практический способ узнать, отправлено ли SMS