16 Stimmen

Wie funktionieren Absichten intern?

Ich habe eine App entwickelt und einige Tests ausgeführt. Diese Tests bestehen darin, Daten von einem Hintergrunddienst an einen anderen Hintergrunddienst zu senden. Alle Daten wurden empfangen, als die Übertragungsrate niedrig war (4 Intents/Sekunde). Allerdings, als ich die Übertragungsrate erhöhte (8 und 12 Intents/Sekunde), wurden einige Daten (typischerweise 2-3 %) nicht vom Ziel-Dienst empfangen.

Alle Intents wurden gesendet und die Dienste liefen lokal.

Kann mir jemand sagen, wie das Betriebssystem mit den Intents umgeht und wie der gesamte Mechanismus funktioniert, um den Grund herauszufinden, warum die Daten nicht vom Empfänger empfangen wurden?

Mit freundlichen Grüßen,

3voto

Force Punkte 6136

Zunächst empfehle ich, den Service zu binden und dann Handlers für IPC zu verwenden. Ein gutes Beispiel finden Sie hier: http://developer.android.com/guide/components/bound-services.html Dies ist viel schneller und zuverlässiger.

Wie Intents intern arbeiten, können Sie im Quellcode nachschauen: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/ContextImpl.java#L893

3voto

Ivan Bartsov Punkte 17774

Hier sind die relevanten Methoden (Sie können sehen, dass die erste Methode aus der ContextImpl.broadcastIntent() Methode aufgerufen wird, siehe den Link in Force's Antwort):

1voto

onosendai Punkte 28070

Ein möglicher Grund ist, dass die Android Interprozesskommunikation synchron ist. Der aufrufende Clientprozess wird für die Dauer der Antwort des Serverprozesses blockiert. Ihr Dienst mit dem Timer wird für kurze Zeitblöcke blockiert, was zu dem von Ihnen beobachteten Verhalten führen könnte.

Quelle: Android Binder - Android Interprocess Communication von Thorsten Schreiber, S. 11 - 13.

BEARBEITEN: Ich habe die Antwort veröffentlicht, weil die Kommentare von Chris Stratton und João Nunes wertvoll sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X