2010-04-18 3 views
5

Ist es möglich, alle gestarteten Dienste zu stoppen, wenn der Benutzer die Home-Taste drückt?Stoppen Sie alle gestarteten Dienste auf App Schließen/Beenden

Ich benutze:

startService(new Intent(ClassName.this, ClassName2.class)); 
stopService(new Intent(ClassName.this, ClassName2.class)); 

Das bedeutet, werde ich irgendwie die ‚Stopservice()‘ hinzufügen für 7+ meiner App Klassen Ich habe dieses Thema recherchiert und ich denke, es gibt ‚OnTerminate‘ aber immer noch nicht sicher, wie dies umgesetzt werden soll.

Jede Hilfe oder Hinweise wären willkommen! Danke!

Antwort

16

Ist es möglich, alle Dienste gestartet zu stoppen, wenn der Benutzer den Start Knopf trifft?

Nicht direkt. Für den Anfang haben Sie keine Möglichkeit zu wissen, dass sie HOME gedrückt haben.

Wenn Sie nur möchten, dass der Dienst ausgeführt wird, während Aktivitäten ihn verwenden, sollten Sie sich von startService() befreien. Verwenden Sie stattdessen bindService() in den onStart() Methoden der Aktivitäten, die den Dienst benötigen, und rufen Sie unbindService() in ihren entsprechenden onStop() Methoden auf. Sie können BIND_AUTO_CREATE verwenden, damit der Dienst bei Bedarf gestartet wird, und Android stoppt den Dienst automatisch, nachdem alle Verbindungen getrennt wurden.

+0

Danke für die Antwort. Das macht alles Sinn, aber gibt es noch mehr Informationen zu "BIND_AUTO_CREATE"? Ich verstehe das "Service" -Konzept, bin mir aber immer noch nicht sicher, wie ich die Musik zwischen meinen 7+ Aktivitäten halten soll, aber höre auf, wenn der Nutzer auf den "Startbildschirm" kommt. Wenn jemand anderes das gleiche Problem hat, fand ich einen guten Artikel über Android-Dienste hier: http://www.androidcompetencycenter.com/2009/01/basics-of-android-part-iii-android-services/ –

+0

Ihr Das gewünschte Muster wird schwierig zu implementieren sein. Das ist der Grund, warum die meisten Musik-Player nicht das tun, was Sie tun - sie * möchten * ausdrücklich die Musik abspielen, wenn der Benutzer HOME drückt und eine Benachrichtigung für schnellen Zugriff zurück zur App bietet, um die Musik zu stoppen. In der Tat wird es unmöglich sein, dieses Muster speziell für HOME zu implementieren. Sie können dieses Muster möglicherweise implementieren, wenn "keine meiner Aktivitäten im Vordergrund" stehen, indem Sie eine Markierung darüber halten, ob eine Ihrer Aktivitäten im Vordergrund ist, sowie einen Watchdog, der die Musik schließt, wenn die Flagge zu lange falsch ist. – CommonsWare

+0

Ja, das ist nur für ein Spiel, also wenn das Spiel angehalten/pausiert wird, wird die Musik nicht abgespielt. Ich habe festgestellt, dass ich onPause() verwenden kann, um die Wiedergabe zu stoppen, wenn ich 'HOME' drücke, aber das einzige Problem ist, dass es aufhört, wenn ich im Spielmenü fortfahre. Hinweise zur Lösung dieses Problems? –

2

Wenn Dienste gestoppt werden sollen, wenn der Benutzer Ihre App verlässt, würde ich Sie fragen, ob Sie überhaupt Dienste verwenden möchten. Sie können Ihre Bewerbung viel komplizierter machen, als es sein muss.

Auch diese Linie ist wirklich fragwürdig:

 
startService(new Intent(ClassName.this, ClassName2.class)); 

Sie führen ein Intent, deren Wirkung ist der Klassenname einer Klasse, und Daten URI ist der Klassenname einer anderen Klasse ...! Vielleicht meinst du etwas wie "neue Absicht (Kontext, MyService.class)"?

+0

Vielen Dank für Ihre Eingabe. Ich versuche nur Musik in meiner App zu spielen. Ich habe auch Musik/Sound-Einstellungen, um es auszuschalten usw. Ich werde auch den "neuen Intent" Teil beheben. –

+0

Okay. Sie brauchen jedoch keinen Dienst, um Musik spielen zu lassen. – hackbod

Verwandte Themen