2012-04-01 12 views

Antwort

1

Eigentlich sind das zwei sehr unterschiedliche Dinge. Der Alarm Manager kann verwendet werden, um einige Aufgaben regelmäßig über den Service auszuführen. Aber Service kann auch z.B. um einige schwere Arbeiten aus dem UI-Thread zu entfernen (Daten vom Rest-Server herunterladen) oder im Falle von Vordergrund-Diensten, um einige Arbeiten kontinuierlich auszuführen (MP3-Player).

Sie können einige Erklärungen zur Verwendung des Dienstes (mit einigen Ratschlägen bezüglich AlarmManager) unter Styling Android erhalten.

+0

Sie können den Alarm sofort und in der onreceive() - Funktion einstellen Mach die schwere Arbeit in einem separaten Thread. – Ashwin

+0

Um ehrlich zu sein habe ich nie versucht, es so zu machen. Aber Services werden für viele andere Aufgaben ohne AlarmManager verwendet. Zum Beispiel verwende ich einen Service, um Daten vom Rest-Server herunterzuladen und sie an zwei verschiedene Aktivitäten zu übergeben. Ich möchte in der Lage sein, die gleichen Daten zu erreichen und den Download von beiden neu zu laden. Um ehrlich zu sein, kann ich mir hier keine nette Alternative zum Service vorstellen. AlarmManager ist in solch einer Aufgabe völlig nutzlos –

0

Im Allgemeinen wird ein Service verwendet, um Logik zu verarbeiten, wenn Sie keine Benutzeroberfläche mehr benötigen. Zum Beispiel überprüft der Service, den ich verwenden möchte, alle 15 Minuten eine Social-Networking-Site auf Updates. Der Dienst hat die Logik, das Update zu verarbeiten. Aber wer startet den Service alle 15 Minuten? Dort wird AlarmManager verwendet. Es wird meinen Dienst periodisch alle 15 Minuten einmal starten, so dass der Dienst seine Logik ausführen und sich selbst stoppen kann, sobald die Arbeit erledigt ist und meine Anwendung die Batterie nicht weiter entleert.

+0

Genau, das ist es, was ich erzähle. "Aber wer wird den Service alle 15 Minuten beginnen?". Warum müssen Sie den Dienst alle 15 Minuten starten? Sie können den Code zum Überprüfen von Updates direkt in die onReceiver() - Funktion des Broadcast-Receivers schreiben. – Ashwin

+0

Ich verstehe nicht, was du erzählst. Bitte erläutern Sie ausführlich. – Ashwin

+0

Ein Broadcast-Empfänger wird ausgelöst, wenn eine übereinstimmende Absicht gesendet wird. Selbst wenn ein Update im Social-Networking-Server vorhanden ist, kann es keine Übertragung von Absicht durch den Server in Ihrem Handy geben. Es kann nur von innerhalb des Mobiltelefons durchgeführt werden. Ein Br ist in diesem Fall nutzlos. Sie können nur über das Update herausfinden, indem Sie eine Verbindung zum Server herstellen (von einem Dienst) – Akhil

1

Nun, beide sind total unterschiedlich thigns.

AlarmManager Die Klasse wird verwendet, um bestimmte Ereignisse nach einem bestimmten Zeitintervall oder nach einem regelmäßigen Zeitintervall auszuführen. Ein Ereignis kann auch eine Ausführung des Dienstes sein. Mit dem AlarmManager können Sie planen, dass Ihre Anwendung irgendwann in der Zukunft ausgeführt wird.

Während im Fall von Service ist es ein Hintergrundprozess, der eine UI/requier nicht hat. Ein Service ist kein seperater Prozess oder Service ist kein Thread. Ein Dienst ist eine Anwendungskomponente, die entweder den Wunsch einer Anwendung darstellt, einen länger andauernden Vorgang auszuführen, während sie nicht mit dem Benutzer interagiert, oder Funktionen für andere Anwendungen zu verwenden

+0

Auch ein Alarmmanager ist ein Hintergrundprozess, der keine Benutzeroberfläche benötigt. Was auch immer Sie in der Serviceklasse tun, das Gleiche können Sie auch in der Broadcast-Empfängerklasse tun. – Ashwin

+0

Nun können Sie keine Ereignisse in der Service-Klasse planen. – Lucifer

+0

Also, was ist dein Fazit? – Ashwin

Verwandte Themen