使ってみると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): VM をシャットダウンしています I/ActivityManager( 148): サービス com.example.nullptrservice/.MyService の proc com.example.nullptrservice を開始します: pid=4184 uid=10066 gids={} I/AndroidRuntime(4174): 注: スレッド 'Binder Thread #3' のアタッチに失敗しました D/dalvikvm( 4174): GC_CONCURRENT は 103K を解放し、81% は 489K/2560K を解放し、1ms+1ms を一時停止しました D/jdwp ( 4174): ウェイクアップ シグナルを受信しました。選択を解除しました D/dalvikvm( 4174): デバッガーが切り離されました。オブジェクト レジストリには 1 個のエントリがありました D/AndroidRuntime(4184): VM をシャットダウンしています W/dalvikvm(4184): threadid=1: キャッチされない例外で終了するスレッド (group=0x409ee1f8) E/AndroidRuntime(4184): 致命的な例外: メイン E/AndroidRuntime(4184): java.lang.RuntimeException: サービス com.example.nullptrservice.MyService をインスタンス化できません: java.lang.NullPointerException E/AndroidRuntime(4184): android.app.ActivityThread.handleCreateService(ActivityThread.java:2237) E/AndroidRuntime(4184): android.app.ActivityThread.access$1600(ActivityThread.java:123) E/AndroidRuntime(4184): 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): 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): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) で E/AndroidRuntime (4184): 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): android.content.ContextWrapper.getPackageManager(ContextWrapper.java:86) で E/AndroidRuntime(4184): 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): android.app.ActivityThread.handleCreateService(ActivityThread.java:2234) E/AndroidRuntime( 4184): ... 10 以上
アンドロイド 4.0.3