2015-09-17 3 views
6

これはActivityからボタンをクリックして呼び出されたServiceです。 Serviceが実行中に私がActivityをスワイプすると、クラッシュする。私はマニフェストにandroid:process=":remote"を入れて別のプロセスで実行しようとしましたが、それはまだ同じです。アプリを殺すとSTART_STICKYでAndroidサービスがクラッシュする

@Override 
public void onCreate(){ 
    super.onCreate(); 
    Log.d("Service", "Creating"); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    return null; 
} 

@Override 
public int onStartCommand (Intent intent, int flags, int startId) 
{ 
    super.onStartCommand(intent, flags, startId); 

    Log.d("Started", "Service"); 

    type = intent.getIntExtra("Type",-1); 
    mode = intent.getIntExtra("Mode",-1); 
    rank = intent.getIntExtra("Rank", -1); 
    latitude = intent.getDoubleExtra("Lat", -1.0); 
    longitude = intent.getDoubleExtra("Long", -1.0); 
    startTime = intent.getLongExtra("Start", 0); 
    endTime = intent.getLongExtra("End", 0); 

私は取得していますエラーは次のとおりです。このServiceが出てきている

java.lang.RuntimeException: Unable to start service com.[email protected] with null: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2913) 
     at android.app.ActivityThread.access$2100(ActivityThread.java:148) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5312) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Intent.getIntExtra(java.lang.String, int)' on a null object reference 
     at com.routofy.routofytest.MyLocationService.onStartCommand(MyLocationService.java:89) 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2896) 
at android.app.ActivityThread.access$2100(ActivityThread.java:148) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5312) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
type = intent.getIntExtra("Type",-1);

nullポインタが、私はアプリを殺すことはプロセスを殺していることを理解され

Intentnullとなります。しかし、たとえActivityが殺されたとしても、Intentが殺されても、Serviceに引き渡されるようなケースをどう扱うべきでしょうか? サービスをActivityから完全に独立させたいと思っています。また、私はそれが好きで実行しています:

Intent pickIntent = new Intent(getApplicationContext(),MyLocationService.class); 
+0

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i- fix-it) – petey

答えて

3

私はアプリを殺すことは、このサービスがNULLであることをカミングアウトされてきているプロセスを殺すと意図されていることを理解しています。

あなたは、私はそれがサービスが渡さnullIntentと、システムによって再作成されていることを意味START_STICKYだと信じているonStartCommand()の戻り値を投稿していないので。

しかし、どのようにそのようなケースを処理するために、たとえ活動が殺されたとしても、意志がサービスに引き継がれます。

だけことを意味し、START_REDELIVER_INTENTフラグを返します「システムはonStartCommand()復帰した後、サービスを殺す場合は、サービスを再作成し、サービスに配信された最後の意図を持ってonStartCommand()を呼び出す」

+0

ありがとうございます。できます。また、START_REDELIVER_INTENTを使用している場合、サービスの実行中に電話機を再起動するとどうなりますか? – gandharv09

+0

@newtoandroidそれは順番にサービスを開始するアプリを起動するまで、何もありません。デバイスの起動時にサービスを開始する場合は、[Androidで起動時にサービスを開始しようとしています](http://stackoverflow.com/questions/2784441/trying-to-start-a-service)をご覧ください。 -on-boot-on-android?rq = 1) – Onik

関連する問題