2015-10-12 9 views
6

Ich bin neu bei Android und ging durch die Dokumentation und einige Tutorials.zwischen SyncAdapter, Dienste, Loader, Provider und Asynctask verwechselt?

Dienstleistungen

Entwicklerführer sagen, es sollte verwendet werden, wenn es erforderlich ist, eine lange Lauf Aufgabe im Hintergrund läuft, Musik-Player sagen.

AsyncTask

Erzeugt einen Arbeiter-Thread Hintergrundaufgabe wie Abrufen von Daten unter Verwendung von api und dann teilen den UI-Thread auszuführen darauf onPostExecute() Callback-Methode ist.

Lader

führt Operationen auf separaten Thread, registriert für den Hörer und benachrichtigt über Datenänderungen einstellen.

Provider

Teile von Daten zwischen verschiedenen Anwendungen, indem sie in der Manifest-Datei auszusetzen.

SyncAdapter

Für Server-Daten zwischen Android-Gerät und Web synchronisieren.

Theoretisch weise verstehe ich die oben genannten Konzepte wie für was sie verwendet werden. Ich habe Schwierigkeiten, sie in Ordnung zu bringen, wie wann wann was zu benutzen? Was wäre das Beste unter ihnen zu verwenden? In welchen Szenarien sollte was verwendet werden?

Für Caching verwendet i sqlite oder Bibliothek wie Volley und retrospice

Wie ich sagte, ich android Anfänger bin und versuchen, diese Konzepte zu verstehen.

Alle Hilfen und Vorschläge würden geschätzt. Vielen Dank im Voraus.

+0

Ihre Frage ist zu breit. Bitte grenzen Sie ihn ein, indem Sie einen tatsächlichen Anwendungsfall angeben, den Sie implementieren möchten. –

+1

Vielen Dank für die Antwort @StephanBranczyk. Ich wollte nur eine klare Vorstellung davon, in welchen Szenarien, was wäre der beste Ansatz zu verwenden. Nehmen wir an, eine App für die Wettervorhersage, kann ich auch aynctask für Wetter-API oder Service verwenden. Zum Zweck der Zwischenspeicherung kann ich SQLLite oder Bibliotheken wie Volley verwenden. Und Content-Provider für die Abfrage und alle anderen Zwecke. Loader für Aysnc Laden von Daten und Anhören der Datenquelle ändern Sie es gebunden. Ich bin nur neugierig, wie man all diese Dinge in eine für bessere Lösung einkapseln kann. Entschuldigen Sie, ich bin nur verwirrt darüber. – Ritesh

+1

Hier sind Infografiken, die Ihnen helfen könnten, besser zu verstehen :) dritte Option sind Dienste: https://raw.githubusercontent.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png – Kalem

Antwort

9

Ein paar Dinge zu Kaleb Antwort hinzuzufügen:

Contentprovider:

Android hat tatsächlich viele Möglichkeiten, Daten zu teilen. Der ContentProvider ist eine Möglichkeit, eine Datenbank zwischen Anwendungen freizugeben. Nehmen wir an, Sie haben 3 E-Mail-Clients auf Ihrem Telefon, die Daten aus der Cloud zwischenspeichern, falls Sie offline sind. Es macht Sinn, dass Sie nur eine Offline-Datenbank Ihrer E-Mails pflegen. Das gleiche gilt, wenn Sie ein Adressbuch, eine SMS-Datenbank oder eine Tweet-Datenbank haben. Und das gleiche gilt, wenn Sie alle diese Daten aktualisieren möchten. Sie möchten diese Daten nur einmal aus der Cloud aktualisieren, nicht jedes Mal dreimal, was mich zum nächsten Thema, dem SyncAdapter, bringt.

SyncAdapter:

A SyncManager ist intelligent genug, um alle Synchronisierungsanforderungen in einem Rutsch zu tun, um die Zeit zu minimieren, die Antenne mit Strom versorgt wird und damit Batterieverbrauch zu sparen. Außerdem kann der Benutzer des Telefons mit Hilfe des AccountManagers die Synchronisierungseinstellungen selbst überschreiben, aber nur, wenn der Entwickler sich dafür entschieden hat, einen SyncAdapter zu verwenden.

Außerdem kann ein SyncAdapter nur mit einem ContentProvider verwendet werden. Selbst wenn Sie Ihre Daten nicht mit anderen Apps teilen möchten, müssen Sie einen Content-Provider verwenden, wenn Sie einen SyncAdapter verwenden möchten.

Das gesagt, ContentProvider sind sehr schwer für Anfänger (auch für fortgeschrittene Entwickler) zu implementieren. Ich würde vorschlagen, dass du dich vorerst von ihnen fernhältst. Sie sollten einen ContentProvider verwenden, wenn es bereits einen für das gibt, was Sie tun möchten, aber ich empfehle nicht, dass Sie versuchen, einen eigenen zu erstellen.

Lader:

Lader sind gut. Lernen Sie, sie zu verwenden, wenn Sie Daten von einer lokalen Datenbank (oder von einem ContentProvider) anzeigen möchten. Sie sparen Ihnen Zeit. Anders als der SyncAdapter benötigen Loader keinen ContentProvider, damit sie funktionieren. Sie können direkt auf SQLite zugreifen.

Dienstleistungen:

lernen, sie zu benutzen. Es gibt zu viele Dinge über sie zu sagen. Ein wichtiger Punkt ist, dass Sie die Zeit, in der sie am Leben bleiben, minimieren sollten, indem Sie Komponenten wie AlarmManager oder BroadcastReceiver verwenden. Außerdem müssen Sie den Unterschied zwischen einem Service und einem IntentService kennenlernen.

AsyncTask:

AsyncTask ist sehr oft notwendig, in Android zu vermeiden, dass der Haupt-UI-Thread zu blockieren. Glauben Sie nicht, dass Sie, weil Sie eine AsyncTask verwenden, auf die Verwendung von Services verzichten können.

Beachten Sie, dass viele Android-Tutorials Ihnen nur die minimale Menge an Code zur Verfügung stellen, um ein Konzept zu demonstrieren, so dass sie oft das richtige Threading überspringen.Beachten Sie, dass Sie Ihren eigenen Thread manuell starten können, wenn Sie möchten, aber AsyncTask macht andere Dinge für Sie, die es zur idealen Wahl für viele Situationen machen, in denen der UI-Thread blockiert wird und Sie einen "Application Non Responding" -Fehler erhalten.

Bibliotheken:

Es gibt viele gute Bibliotheken gibt. Ich werde nicht sagen, welche die Guten sind. Lerne, die zu verwenden, die jeder empfiehlt. Diese Bibliotheken können eine Menge für Sie tun (vorausgesetzt, Sie sind gut genug, um sie zum Laufen zu bringen). Es gibt ein bisschen eine Lernkurve, aber es ist es wert. Und sie arbeiten mit Android auf einer viel höheren Ebene der Abstraktion, so dass normalerweise das Threading und viele andere Dinge für dich erledigt werden.

Es gibt viele andere Dinge, die ich beschönige, oder die ich überhaupt nicht erwähnt habe, aber wie gesagt, ich denke deine Frage ist zu weit gefasst. Und wenn Sie wirklich mehr Details wünschen, sollten Sie die Entwicklerhandbücher durchsuchen und einige der von Google bereitgestellten YouTube-Videos ansehen.

+0

Danke @Stephan, ich werde mehr auf meiner Lernkurve erkunden. Es hat viele grundlegende Konzepte gelöst. – Ritesh

+0

SyncAdapter benötigt keinen ContentProvider. Sie erstellen ein Stub-Konto und ContentProvider und verwenden es mit einem anderen Persistenzschema. https://developer.android.com/training/sync-adapters/creating-sync-adapter.html –

+0

Vermeiden Sie auch die Verwendung von AsyncTask: http://blog.danlew.net/2014/06/21/the-hidden-pitfalls von-asynctask / –

2

Wirklich schnelle Antwort:

AsyncTask: kurze Aufgabe, die den UI-Thread blockieren könnte. Es macht dir nichts aus, wenn sie abbrechen und du sie erneut starten musst.

Dienste: Verwenden Sie, wenn Sie eine lange Aufgabe haben, die nicht durch App-Änderungen unterbrochen werden soll. Bit zu implementieren, als AsyncTask zu implementieren.

Lader: die für den Datenbankzugriff

SyncAdapter: hier Sie haben keine Echtzeit-Daten. Sie planen die Datensynchronisation zu einem bestimmten Zeitpunkt (z. B. Synchronisierungsmails, Kontaktdaten usw.). Angenommen, Sie haben jede Stunde neue Daten.

Anbieter: nichts mit dem oben genannten zu tun. Dies wird verwendet, um Daten zwischen Apps zu teilen. Es ist dir egal, wie Daten von der App zum Teilen abgerufen werden. Du weißt nur, dass du nach einer bestimmten Ressource fragen kannst.

Diese infographis hat mir geholfen, besser zu verstehen, die ersten 3: https://raw.githubusercontent.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png

+0

Danke @kalem, für diese großartige schnelle Antwort. Es löste die meisten der verwandten Konzepte. Vor allem die infographis, die Sie geteilt haben. Aber ich hoffe immer noch auf eine detaillierte Antwort. – Ritesh

Verwandte Themen