Ich versuche herauszufinden, welches das beste allgemeine Design für Anwendungen ist, die auf mehrere Webdienste zugreifen und mehrere Aktivitäten haben, bei denen Informationen angezeigt werden.
Die Art und Weise, wie ich meine neueste Android-Anwendung implementiert habe, ist folgende. Ich habe eine IntentService
, die Anfragen von Aktivitäten erhält, um Informationen von Webdiensten zu erhalten. Mein Service
benachrichtigt die Aktivitäten über einen ResultReceiver
über den Status der Anfrage (gestartet / error / finished). Nachdem ich den Webservice aufgerufen, das Ergebnis (xml / json) abgerufen und analysiert habe, stelle ich diese Informationen in ein ContentProvider
(gesichert durch eine SQLite-Datenbank) und benutze ContentResolver
, um alle Aktivitäten über die Änderungen zu melden. Die Aktivitäten werden über die Änderungen benachrichtigt (einige verwenden ContentObserver
und andere verwenden SimpleCursorAdapter
s und werden automatisch benachrichtigt).
Nun, die Probleme mit meinem Ansatz:
IntentService
für jeden Webservice erstellen, aber ich denke nicht, dass dies der Zweck ist. Ich habe das Gefühl, dass der Ansatz, den ich gewählt habe, nicht wirklich der beste für diese spezielle Anwendung ist. Es ist teilweise von der Google I / O-Anwendung inspiriert (ich konnte nicht alles verstehen, wie die aktualisierten SQLite-Felder usw.). Eine Alternative wäre die Verwendung von AsyncTasks in allen Aktivitäten. Aber wo kann ich die Informationen speichern, um von anderen Aktivitäten aus erreichbar zu sein? In Listen in Application
? Und wie wäre es mit ID-Management?
Ich bin wirklich an Ihren Meinungen / Ideen / Vorschlägen interessiert und wie kann ich meine nächsten Anwendungen besser und effizienter machen.
Hast du dieses Gespräch überprüft? Ссылка
Ich fand es eine Quelle guter Inspiration. Im Grunde schlagen sie vor, einen Service-Helfer (in Ihrem Fall ein Service-Helfer für Ihren Intent-Service) als Singleton-Klasse aufzubauen. Sie können die laufenden Anfragen verfolgen
Auf diese Weise können Sie jede andere Art von laufenden Hintergrundaufgaben, die Sie ausführen, verfolgen und jede andere Anfrage der gleichen Art blockieren. Wenn Sie z. B. die Aktivität a verlassen und die Aktivität b eingeben, und sie nach derselben Web-Service-Abfrage fragen, können Sie überprüfen, ob sie aufgrund der Aktivität a noch aktiv ist.
Nach dem, was ich in der iosched-App gesehen habe, leidet es unter dem Problem, dass das Abrufergebnis verloren geht, wenn die Aktivität geschlossen wurde.
Es gibt ein klares Protokoll, das besagt:
Log.w(TAG, "Dropping result on floor for code " + resultCode + ": "
+ resultData.toString());
Ich schlage auch nicht vor, asynctask zu verwenden, weil das Ergebnis auch verloren gehen würde.
Sehen Sie sich jedoch das Gespräch und die Folien an.