Ich bin gerade auf Android-Dienste, aber ich habe viele Zweifel. Hier sind einige Fragen. Bevor ich beginne, habe ich diese Seiten Android Services (official) Bounded Services (official) plus Sone Inner Klassen Theorie in meiner Sprache gelesen. Bitte sei geduldig, ich bin immer noch ein bisschen verwirrt.Bitte erklären Sie einige Android-Service-Konzepte
1) Zunächst unterscheidet sich ein Dienst von einer AsyncTask hauptsächlich dadurch, dass er auch weiterhin ausgeführt wird, wenn die App pausiert ist (d. H. Der Benutzer beobachtet eine andere App); In diesen Fällen wird AsyncTask beendet. Ist es in Ordnung oder irre ich mich? 2) Ein Dienst wird im selben Thread der Aktivität ausgeführt, die ihn über startService() gestartet hat. Um die Leistung der Aktivität nicht zu beeinträchtigen, muss ich einen separaten Thread für diesen Dienst erstellen, z. B. die Runnable-Schnittstelle implementieren. Eine andere Methode besteht darin, einen Dienst zu erstellen, der IntentService erweitert, der automatisch einen neuen Thread für den Dienst bereitstellt: Bei jedem Aufruf von onHandleIntent() wird ein neuer Thread erstellt.
Schauen wir uns jetzt mein konkretes Problem an. Ich muss einen Dienst erstellen, der von vielen Aktivitäten verwendet wird: Seine Aufgabe wird sein, alle 60 Sekunden eine Verbindung zur Server-DB herzustellen und nach Neuigkeiten zu suchen. Wenn eine Nachricht gefunden wird, benachrichtigen Sie, dass es eine neue Nachricht gibt (wenn wir auf MainActivity sind) oder zeigen Sie den neuen Nachrichtentitel an (wenn wir im Nachrichtenreader sind). Wie soll ich es kodieren? Ich habe eine MainActivity erstellt, die einen NewsService instanziiert und sofort startService() aufruft. Auf der anderen Seite habe ich den NewsService erweitert IntentService, dass (erstellt einen neuen Thread, wenn onHandleIntent aufgerufen wird?) Und sucht nach neuen Nachrichten. Ist es eine schlechte Idee, einen IntentService zu verwenden? Ich erkannte, dass es sehr hässlich sein wird, den Dienst zu starten, der startService() auf unbestimmte Zeit aufruft. Zu Beginn dieser Übung dachte ich, dass es eine gute Lösung ist, da es automatisch einen neuen Thread erstellt und die Implementierung des Dienstes vereinfacht. Aber jetzt habe ich einige Zweifel (ich kann nicht wissen, ob es eine Nachricht gibt! Wie kann MainActivity es wissen? Und wie man den Titel bekommt)
Dies sollte mit einer normalen erweitert Thread Klasse durchgeführt werden, die einen unendlichen cicle macht in seiner run() -Methode, nach Nachrichten alle 60 Sekunden überprüft und, wenn es eine neue gibt, liest den Titel von Remote-DB und Update-Aktivitäten Schaltflächen/Ansichten. Wenn die App dann vom Benutzer geschlossen wird, wird der Dienst ebenfalls geschlossen. Aber das Problem ist, dass, wenn ich solche Klasse Klasse ist es Arbeit gestoppt wird, wenn die MainActivity pausiert oder gestoppt ist, und andere Aktivitäten (der NewsReader in diesem Fall) kann keine Aktualisierung erhalten, weil der neue Thread keine Nachrichten im Moment erhält . Also brauche ich einen Service.
Ich hoffe, es ist klar. Wie sollte ich eine Lösung richtig umsetzen? Bitte markieren Sie alles falsch in meinem Text, ich muss wirklich lernen: D
Danke. Ich weiß eigentlich nichts über Broadcast Intent und Broadcast Receiver: Wenn mir niemand eine Lösung gibt, gehe ich direkt auf die entsprechenden Docs: D. BTW, ich kann nicht glauben, dass ich alles verstanden habe xD – mark
Dies kann Ihnen etwas Verständnis von "Broadcast" geben: http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html –
Auch dieser Artikel hat Informationen über die Planung einer Service über 'AlarmManager' und über Updates per' Broadcasts': http://www.vogella.com/tutorials/AndroidServices/article.html –