2015-09-17 10 views
6

Dies ist meine Service immer auf Knopfdruck von einem Activity aufgerufen werden. Wenn ich meine Activity nach links wische, während Service läuft, stürzt es ab. Ich habe auch versucht, es in separatem Prozess laufen zu lassen, indem ich in das Manifest einsetze, aber es ist immer noch dasselbe.Android-Dienst mit START_STICKY stürzt beim Töten von App

@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); 

Der Fehler Ich erhalte ist:

java.lang.RuntimeException: Unable to start service [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) 

Das null Zeiger auf type = intent.getIntExtra("Type",-1);

ich, dass die App zu töten verstehen ist, den Prozess und die Intent diese Service tötet steigt aus kommend zu sein null. Aber wie geht man mit solchen Fällen um, wenn Activity getötet wird Intent wird an Service übergeben? Ich möchte Service völlig unabhängig von Activity sein. Auch ich bin mit ihm mag:

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

Mögliche Duplikate von [Was ist eine NullPointerException, und wie behebe ich es?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i- fix-it) – petey

Antwort

3

Ich verstehe, dass die App zu töten, um den Prozess und die Absicht zu töten dieser Dienst wird immer null sein herauskommt.

Da Sie nicht den Rückgabewert von onStartCommand() gebucht haben Ich glaube, dass es START_STICKY Bedeutung, dass der Dienst durch das System mit nullIntent gebenen neu erstellt wird.

Aber wie solche Fälle zu behandeln, Selbst wenn die Aktivität getötet wird, wird die Absicht dem Dienst übergeben.

Ist gerade START_REDELIVER_INTENT Flagge, was bedeutet, dass: „Wenn das System den Dienst nach onStartCommand() kehren tötet, den Dienst neu erstellen und onStartCommand() mit der letzten Absicht nennen, die den Dienst zugestellt wurde“

+0

Danke. Es klappt. Auch irgendeine Ahnung, was passiert, wenn ich das Telefon neu starte, während der Dienst läuft, wenn ich START_REDELIVER_INTENT verwende? – gandharv09

+0

@newtoandroid Nichts, bis Sie die App starten, die ihrerseits den Dienst startet. Wenn Sie den Dienst beim Gerätestart starten möchten, werfen Sie einen Blick auf [Versuch, einen Dienst beim Start unter Android zu starten] (http://stackoverflow.com/questions/2784441/trying-to-start-a-service -auf-boot-auf-android? rq = 1) – Onik

Verwandte Themen