2017-12-20 10 views
-1

Ich habe eine Aktivität, die einen Dienst startet und stoppt. Es scheint einfach zu sein, aber wenn ich den Service beginne und ihn aufhalte, ist es in Ordnung.
Aber wenn ich den Dienst neu starte, habe ich zwei Instanzen des Dienstes gefunden.
Warum?Mehrere Instanzen eines Dienstes verhindern

public class Test extends AppCompatActivity implements View.OnClickListener { 
     @Override 
public void onClick(View v) { 
    switch (v.getId()) { 

     case R.id.InitButton: 
     { 
      startMonitor(); 
     } 
     break; 
     case R.id.EndButton: 
     { 
      stopMonitor(); 
     } 
     break; 
     case R.id.SendData: 
     { 
      sendData(); 
     } 
     break; 
     default: 
      break; 
    } 
} 

    ... 

    private void startMonitor(){ 

    Intent intent = new Intent(this, MyService.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 


    startService(intent); 

} 

private void stopMonitor(){ 

    Intent intent = new Intent(this, MyService.class); 
    stopService(intent); 

} 

Wenn ich „initButton“ Service
Klicken Sie dann auf „EndButton“ Ich starten klicken und Service Ende
Dann wieder ich auf „initButton“ und zwei Dienste

beginne ich sehe die Post vorgeschlagen, aber mein Service ist nicht im Laufen, wenn ich es in der Tätigkeit stoppe

+0

Mögliches Duplikat von [Wie überprüfe ich, ob ein Dienst unter Android läuft?] (Https://stackoverflow.com/questions/600207/how-to-check-if-a-service-is-running-on-android) – Zoe

+0

Und für den Datensatz gibt es zwei Instanzen, weil Sie nicht überprüfen, ob ein vorhanden ist läuft. Es gibt keine Begrenzung für die Anzahl der Dienste eines bestimmten Typs, die Sie haben können (mit Ausnahme der Hardwarelimits, natürlich) – Zoe

+0

Wenn ich den Dienst vor dem Start stoppe, warum gibt es einen laufenden Dienst? – mrpep

Antwort

0

Ich empfehle jedem Entwickler, den sie über "Bande von vier" lesen. In Ihrem Fall stellt ein singleton Design sicher, dass nur eine Instanz einer Klasse gleichzeitig ausgeführt wird. Per default sollte ein gestarteter Dienst nur eine Instanz haben, unabhängig davon, wie oft er gestartet wurde. Dieses Flag Intent.FLAG_ACTIVITY_NEW_TASK würde eine andere Aufgabe starten, selbst wenn bereits eine ausgeführt wird. Versuchen Sie, das Flag zu entfernen, bevor Sie es zu einem Singleton machen. Wenn Sie jedoch einen Singleton machen, würde nichts schaden (vorausgesetzt, Sie möchten eine Instanz)

Verwandte Themen