2016-09-21 6 views
0

Ich möchte einen Dienst starten, wenn die Benutzer meine Anwendung öffnen, einige meiner Aktivitäten müssen den Dienst binden, und wenn die Benutzer meine Anwendung schließen, stoppe ich den Dienst.So lösen Sie einen Dienst, wenn die Anwendung zerstört wird

Die Frage ist, wo kann ich den Dienst stoppen. Ich möchte, dass mein Service funktioniert, wenn meine App geöffnet ist.

Ich starte den Service in Methode, und ich fand, dass es keine onDestroy() Methode in Application gibt.

Und ich habe versucht, es in der Launcher-Aktivität onDestroy zu stoppen, aber ich denke nicht, das ist ein guter Weg, weil das System Recovery Launcher-Aktivität, wenn wenig Speicher.

+0

„Ich möchte einen Dienst starten, wenn die Benutzer meine Anwendung zu öffnen, müssen einige meiner Aktivitäten um den Dienst zu binden, und wenn die Benutzer meine Anwendung zu schließen, halte ich den Dienst“ - was ist der Service giving Sie, dass Sie mit einem gewöhnlichen Java-Objekt nicht umgehen konnten? – CommonsWare

+0

Ich möchte eine TCP-Verbindung mit dem Server aufrechterhalten, wenn die App geöffnet ist, einige Aktivitäten benötigen den Socket zum Senden von Nachrichten. Ich denke, das ist eine Arbeit für den Dienst, ich kann bis jetzt keinen anderen Weg finden. –

+1

"Ich kann bis jetzt keinen anderen Weg finden" - benutze ein normales Java-Objekt, in Form eines Singletons 'AppConnectionManager' oder so. Nochmal: Warum muss das ein Service sein? – CommonsWare

Antwort

0

Was ist, wenn Sie Ihren Dienst basierend auf laufenden Aktivitäten gestartet und gestoppt haben? Hier ist ein Beispiel.

public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks { 

    private int startedActivitiesCount = 0; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     registerActivityLifecycleCallbacks(this); 
    } 

    private void onAppStart() { 
     // Start service 
    } 

    private void onAppQuit() { 
     // Stop service 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 
     startedActivitiesCount++; 
     if (startedActivitiesCount == 1) { 
      onAppStart(); 
     } 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
     startedActivitiesCount--; 
     if (startedActivitiesCount == 0) { 
      onAppQuit(); 
     } 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 
    } 

} 
Verwandte Themen