Unter welchen Umständen wäre die Verwendung von AIDL zum Definieren einer Serviceschnittstelle die richtige Entscheidung (anstatt nur eine Erweiterung für die Klasse service
zu erstellen)?Wann wird ein aidl-basierter Dienst verwendet?
Antwort
Durch das bloße Erweitern einer Serviceklasse kann Ihr Dienst seine Methoden nicht externen Entitäten zugänglich machen. Wenn Sie möchten, dass Ihr Dienst durch einen Code, der nicht in Ihrer Android-App läuft, verfügbar gemacht wird, müssen Sie eine AIDL dafür definieren. Diese AIDL wird geteilt und als Vertrag für Ihren Service gebildet. Siehe hierzu http://developer.android.com/guide/components/aidl.html.
Sie müssen AIDL verwenden, wenn Sie möchten, dass eine Klasse außerhalb des Anwendungsvorgangs auf den Service zugreift. Wenn Sie den Service nur in Ihrer Anwendung verwenden, können Sie eine local service verwenden.
1.wenn Sie aidl-basierten Dienst verwenden.
ein paar Vorteile können durch das Segment Teil des Codes in Backend-Service gewonnen werden:
- entkoppeln Front-End- und Back-End-
- Speicher/CPU-intensive Verarbeitung zu Backend-Service gestapelt werden können, GC in Dienst nicht Front-End-User Experience
- Service Absturz beeinflussen bringen nicht die ganze APP
2.how einen solchen Dienst erstellen
ich eine gute Bibliothek geschrieben haben, können Sie als Beispiel siehe http://github.com/zhchang/hogwarts
AIDL
Die Definition Android Interface Language (AIDL) eine Programmierschnittstelle zu definieren, ermöglicht es Entwicklern, dass der Client und Server verwenden zu kommunizieren miteinander über Inter-Process Communication (IPC).
Dieser Artikel zeigt, wie Sie eine Verbindung zu einem aktiven Dienst in Android herstellen und wie Sie die Daten vom Remote/Running-Dienst abrufen können.
Beispiel für IPC-Mechanismus
Let Remoteservice einen Client-Dienst und RemoteServiceClient sein, eine Tätigkeit sein mit dem Remote-Dienst zu kommunizieren.
Ein Dienst bietet Informationen über die mathematischen Operationen wie Addition, Subtraktion und Multiplikation für die angegebenen zwei Ganzzahlen. Um die Funktionalität des Dienstes zur Verfügung zu stellen, erstellen Sie eine .aidl-Datei im Projektverzeichnis.
- 1. Wann wird ein Initform verwendet?
- 2. Wann wird ein Identity Mapper/Reducer verwendet?
- 3. Wann wird ein Build-Tool verwendet?
- 4. Wann wird ein gepufferter Kanal verwendet?
- 5. Wann wird [MTAThread] verwendet?
- 6. Wann wird Ertrag verwendet?
- 7. Wann wird TWaitResult.wrIOCompletion verwendet?
- 8. Wann wird Parallel.For verwendet?
- 9. Wann wird ein Tag/Label verwendet und wann verzweigt?
- 10. Mercurial - Wann wird update verwendet?
- 11. Wann wird React createFragment verwendet?
- 12. Wann wird Julia's convert() verwendet?
- 13. Wann wird die Listenansicht verwendet?
- 14. Wann sollte ein neuer Ausnahmetyp verwendet werden?
- 15. Wann wird in MongoDB ein Standardindex anstelle eines Hintergrundindexes verwendet?
- 16. Wann wird die k-fache Kreuzvalidierung verwendet und wann wird der Split-Prozentsatz verwendet?
- 17. Android: Wann wird Dialog vs. Aktivität verwendet?
- 18. Warum wird "wann" in dieser Funktion verwendet?
- 19. ColdFusion - Wann wird der Bereich "Anfrage" verwendet?
- 20. Taskdatenlokalität NO_PREF. Wann wird es verwendet?
- 21. Wann wird Box anstelle von Referenz verwendet?
- 22. Parcelable wo/wann wird describeContents() verwendet?
- 23. Wann wird das savedInstanceState-Paket tatsächlich verwendet?
- 24. Wann wird die Angular 2 Factory-Funktion verwendet?
- 25. Wann sollte ein Event Bus verwendet werden?
- 26. Wann wird ajaxError aufgerufen, wenn $ .ajax verwendet wird?
- 27. Wann sollte ein IOC-Container verwendet werden?
- 28. Wann sollte ein Singleton verwendet werden?
- 29. Wann muss ein lokaler Zugriffsmodifikator verwendet werden?
- 30. Wann wird genau onServiceConnected für den begrenzten Dienst aufgerufen?
Aber angenommen, nur die App die Nutzung des Dienstes macht, gibt es keinen Grund AIDL zu verwenden - ist das richtig? – MalcomTucker
Korrigieren. Aber warum möchten Sie dann auch einen Service erstellen? –
Ich habe einen lokalen Dienst in meiner App erstellt, um einen größeren Download zu machen. Auf diese Weise hätte ich mehr Kontrolle und Sicherheit als nur eine Async-Aufgabe, die jedes Mal getötet werden kann. Nach meinem Verständnis ist ein Service, der an eine Aktivität gebunden ist, nicht so wahrscheinlich, wenn Ressourcen knapp sind. – Janusz