2017-05-29 4 views
0

Ich habe eine einfache App zum Testen Android: Prozess Attribut des Dienstes. Also meine Service sieht wie folgt aus:Service mit Android: Prozess startet nicht

public class MyService extends IntentService { 
    static final String TAG = "MyService"; 

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

    @Override 
    protected void onHandleIntent(Intent intent) { 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     doJob(); 
     return START_STICKY; 
    } 

    private void doJob() { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       Log.i(TAG,"job started"); 

       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       Log.i(TAG,"job stopped"); 

       stopSelf(); 
      } 
     }).start(); 
    } 
} 

Ich versuche Service von der Tätigkeit zu beginnen wie folgt:

findViewById(R.id.startServiceBtn).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startService(new Intent(getApplicationContext(),MyService.class)); 
      } 
     }); 

alles funktioniert gut. Jetzt füge ich android: process = ": service" -Attribut zur Service-Deklaration im Manifest hinzu. Und danach beginnt der Dienst nicht. Also warum und was sollte ich für den Start-Service in einem separaten Prozess ändern?

+0

Wie Sie, wenn Ihr Dienst ausgeführt überprüfen haben? – F43nd1r

+0

Es ist nicht Ihr Problem, aber Sie verwenden Intent-Service falsch. Sie sollten nichts in OnStartCommand für einen Intent-Dienst tun - es sollte alles in onHandleIntent sein. Indem Sie es in onStartCommand ausführen, brechen Sie die integrierte Methode des IntentService zur Bearbeitung von Anfragen. –

+0

@ F43nd1r Ich überprüfe es mit Android-Monitor-Registerkarte im Studio, sollte Dienst starten doJob() -Methode, die Nachrichten zu logcat drucken. Wenn ich diese Nachrichten sehe, bedeutet dies, dass der Dienst ausgeführt wird – borune

Antwort

0

Ich denke, Sie müssen diese Aufgabe, dodork() -Methode in onHandleIntent() aufrufen. Weil Ihre Serviceklasse Intent-Service statt Service erweitert.

public class MyService extends IntentService { 
static final String TAG = "MyService"; 

public MyService() { 
    super("MyService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
doJob(); 
} 

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


} 

private void doJob() { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      Log.i(TAG,"job started"); 

      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      Log.i(TAG,"job stopped"); 

      stopSelf(); 
     } 
    }).start(); 
} 

}

+0

Sie haben recht, dass er es falsch implementiert, aber das ist nicht sein Problem - es wird so laufen, wie er es geschrieben hat, es wird nur Intents nicht richtig behandeln. –

+0

@Sandeep Kumar ersetzt doJob von onStartCommand zu onHandleIntent hilft nicht – borune

0

oh sorry, es war dumme Fehler - ich habe neuen Prozess in android Monitor Registerkarte auszuwählen) Dank an all