Was ist der Unterschied zwischen einem Dienst und einem Rundfunkempfänger?

14

Ich höre immer wieder von Diensten und Rundfunkempfängern . Was ist der Unterschied zwischen ihnen und wie wirken sie sich aus meiner Sicht auf die Funktionsweise meines Android-Telefons aus?

Dan Hulme
quelle
Sie wissen, anstatt Ports auf der TCP-Ebene zu erstellen, erstellen wir immer Rundfunkempfänger, um den Akku und viel Verarbeitungsaufwand zu sparen. Wenn ein Ereignis in Android auftritt, wird die Rundfunkübertragung im Telefon an alle Apps gesendet. Und wenn Sie Haben Broadcast-Empfänger zu diesem Ereignis geschrieben ,,, wird es automatisch angerufen. Technisch gesehen heißt das Ereignis Vorsatz in Bezug auf Android
Rahul Raina

Antworten:

27

Android-Anwendungen haben drei Arten von Komponenten. Im Allgemeinen müssen Benutzer nicht über sie Bescheid wissen: Sie sind eine Möglichkeit für App-Autoren, bestimmte Verhaltensweisen in ihre Apps zu programmieren. Wenn Sie jedoch das Verhalten Ihrer Apps genau beobachten, z. B. mit einem Task-Manager, oder wenn Sie Dinge mit einer App wie Tasker automatisieren, ist es hilfreich zu verstehen, wie sie im System zusammenpassen.

Eine Aktivität ist die bekannteste Art von Komponente: Es handelt sich um ein Fenster, das Sie sehen können: entweder im Vollbildmodus oder in der Größe eines Dialogfelds. Eine Aktivität wird nur ausgeführt, solange sie auf dem Bildschirm angezeigt wird. Sobald Sie die Aktivität verlassen, hält Android diese App im Speicher bereit, um sie erneut zu starten. Die Aktivität wird jedoch nicht ausgeführt, sodass weder Akku noch Netzwerk verwendet werden. Eine App startet eine Aktivität mit einer Absicht . Die Absicht kann explizit angeben, welche Aktivität gestartet werden soll, oder es kann eine auszuführende Aktion angegeben werden (z. B. das Öffnen einer bestimmten Datei). Wenn mehr als eine Aktivität die Absicht "handhaben" kann, wird das Dialogfeld angezeigt, in dem Sie aufgefordert werden, eine auszuwählen.

Ein Dienst ist eine weitere Anwendungskomponente. Sobald eine andere Komponente (z. B. eine Aktivität oder ein anderer Dienst) einen Dienst gestartet hat, wird er im Hintergrund ausgeführt, bis er sich selbst beendet. Dies bedeutet, dass ein Dienst Ihr Telefon möglicherweise wach hält (mithilfe einer Aktivierungssperre ), den Akku erschöpft oder viele Netzwerkdaten verwendet, ohne dass etwas auf dem Bildschirm angezeigt wird.

Apps können Dienste verwenden, um lang laufende Prozesse im Hintergrund auszuführen, z. B. das Herunterladen von Dateien von einem Server oder das Suchen nach E-Mails oder das Überprüfen Ihres Standorts. Obwohl Dienste nicht direkt angezeigt werden oder mit Ihnen interagieren, werden sie dennoch in der Liste "Laufende Apps" angezeigt. Von der Einstellungen App, wählen Sie Apps oder Anwendungen Manager , und dann laufen . Sie können einen Dienst auf diese Weise beenden, dies ist jedoch normalerweise nicht erforderlich. Da Dienste nicht direkt sichtbar sind, sind sie für Android weniger wichtig als Aktivitäten. Sie werden daher als Erste beendet, wenn Ihr Telefon mehr Speicher benötigt.

Rundfunkempfänger sind die dritte Art von Komponenten. Wie Services existieren sie nur im Hintergrund und interagieren nicht direkt mit Ihnen. Im Gegensatz zu Diensten können sie jedoch nicht ausgeführt werden oder lange Aufgaben ausführen: Sie sind vorhanden, um auf Ereignisse zu reagieren. Und im Gegensatz zu Aktivitäten und Diensten kann mehr als ein Rundfunkempfänger auf einmal gestartet werden.

Eine Komponente sendet eine Absicht möglicherweise an eine App, jedoch häufiger ohne Angabe einer bestimmten App. In diesem Fall steht die Absicht normalerweise für ein Ereignis, das eingetreten ist, wie z. B. ein schwacher Akku. Das System findet alle Rundfunkempfänger, die ein Interesse registriert haben (unter Verwendung eines Absichtsfilters ), und führt jedes nacheinander aus. Jeder Rundfunkempfänger kann sofort reagieren, indem er beispielsweise eine Benachrichtigung erstellt, oder einen Dienst oder eine Aktivität starten, um weitere Maßnahmen zu ergreifen. Sobald der Rundfunkempfänger das Ereignis behandelt hat, wird es gestoppt und erst wieder ausgeführt, wenn ein anderes ähnliches Ereignis gesendet wird.

Ein Beispiel für die Zusammenarbeit aller drei Komponenten ist das Herunterladen einer App von Google Play. Zunächst bietet die Google Play-Aktivität die visuelle Oberfläche, über die Sie den herunterzuladenden Inhalt auswählen können. Die Liste der Apps kann eine Aktivität sein. Durch Klicken auf die Schaltfläche "Installieren" wird eine weitere Aktivität gestartet, um den Bestätigungs- oder Zahlungsdialog anzuzeigen. Wenn Sie bestätigen, startet die Dialogaktivität einen Dienst. Der Dienst lädt den Inhalt auch dann weiter herunter, wenn die Aktivität beendet ist und nicht mehr ausgeführt wird.

Aber möglicherweise verliert das Telefon die Internetverbindung, während die neue App heruntergeladen wird. In diesem Fall registriert der Download-Dienst von Google Play einen Rundfunkempfänger mit einem Filter, der darauf hinweist, dass er an Änderungen der Netzwerkkonnektivität interessiert ist, und der Dienst stoppt sich dann von selbst. Wenn das Telefon eine Verbindung zum Internet herstellt, sendet das System ein Ereignis. Android startet den vom Google Play-Dienst registrierten Rundfunkempfänger sowie alle anderen Rundfunkempfänger, die auf dieses Ereignis warten. In diesem Fall startet der Rundfunkempfänger den Download-Dienst erneut. Der Dienst erstellt Benachrichtigungen, wenn der Download fortgesetzt wird, und sendet nach Abschluss des Vorgangs eine eigene Sendung, um andere Apps darüber zu informieren, dass das neue Paket installiert wurde, und beendet sich dann von selbst. Dies startet wiederum Rundfunkempfänger von anderen Apps,

In Summe:-

  • Eine Aktivität repräsentiert ein Fenster auf dem Bildschirm. Ein Dienst führt eine möglicherweise lang andauernde Hintergrundaufgabe aus. Ein Rundfunkempfänger läuft für kurze Zeit, um ein Ereignis zu behandeln.
  • Alle drei werden mit Absichten, aber mit einem anderen Mechanismus gestartet. Die startende App muss explizit angeben, welche Art von Komponente gestartet werden soll (indem jeweils eine andere Methode aufgerufen wird).
  • Wenn eine App eine Aktivität mit einer Absicht startet, wird nur eine Aktivität gestartet (möglicherweise wird das Dialogfeld "Aktion mit ... abschließen" angezeigt, in dem Sie auswählen können, welche Aktion ausgeführt werden soll), und dies gilt auch für Dienste. Beim Senden einer Absicht werden jedoch möglicherweise mehrere Übertragungen gestartet Empfänger, möglicherweise von verschiedenen Apps.
  • Als Benutzer interagieren Sie direkt mit Aktivitäten. Sie interagieren nicht mit Diensten, diese können jedoch das Telefon verlangsamen und Ressourcen verbrauchen. Sie interagieren nicht mit Rundfunkempfängern, und da diese nur von kurzer Dauer sind, müssen Sie sich keine Gedanken über deren Verwaltung machen.
Dan Hulme
quelle
Eine sehr nützliche Antwort. Ich möchte nur etwas bestätigen: Was passiert mit Apps, die von Benutzern deaktiviert wurden? Startet Android seinen Rundfunkempfänger jemals für die Zwecke, für die er registriert ist? Oder können diese deaktivierten Apps ihren Dienst im Hintergrund ausführen? Warum ist die Force-Stop-Schaltfläche für deaktivierte Apps auch nach einem Neustart nicht ausgegraut? Mir ist klar, dass ihre Aktivitäten nicht gestartet werden können.
Firelord
@Firelord Wenn Sie eine neue Frage haben, sollten Sie diese als neue Frage posten. Kommentare erlauben keine eingehenden Antworten und machen Ihre Frage nicht für andere Besucher auffindbar.
Dan Hulme
toller Beitrag, aber in der Tat gibt es vier Komponenten. Inhaltsanbieter fehlen.
Alexandre Martin