2013-04-04 5 views
5

Ich entwickle eine Android-Anwendung und erstmals mit Content-Beobachter arbeiten. Also lese ich viele Tutorials und habe das Konzept, warum es bereitgestellt wird und wie man es benutzt.Warum und wann die Registrierung von Content-Beobachtern in Android

Jetzt habe ich diese Zeilen in einem Blog gelesen, dass

Dont Inhalt Beobachter

So abzumelden vergessen, ich bin zu verstehen, nicht in der Lage, wenn ich einen ContentObserver dann, was da wolle registrieren möchten sei die Situation, in der ich es abmelden muss.

Wenn der Zweck der Beobachter erfüllt wird, dann ist es ok, wir können es abmelden. Aber ich muss beobachten, bis der Benutzer die Anwendung deinstalliert, und dann werde ich den Beobachter abmelden. Hier

ist die URL dieses Blog

http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/

Antwort

4

Stellen Sie sich vor, Sie haben eine Anwendung, die sagen wir einen Freund Liste Bildschirm erstellt mit einem FriendListActivity. Um jetzt die Benutzeroberfläche für diese Aktivität zu erstellen, lesen Sie Daten aus der Datenbank und erstellen Ihre Benutzeroberfläche.

Stellen Sie sich nun vor, dass Sie auch einen Dienst haben, der im Hintergrund läuft und diese Datenbank mit einer entfernten Datenbank über Webdienste synchronisiert.

Jetzt, wenn der Dienst die Freundesliste in der Datenbank aktualisiert, möchten Sie auch Ihre UI entsprechend aktualisieren. Also, um dies zu erreichen, würden Sie Inhalt Beobachter in Ihrem FriendListActivity zum Zeitpunkt der Activity Start für Freunde URI (vorausgesetzt, dass das Konzept der URI kennen) registrieren, so dass, wenn die Freundesliste in der Datenbank ändert Sie auch Freunde Liste in Ihrem FriendListActivity aktualisieren . Nun, wenn der Benutzer die Aktivität verlassen hat oder die App geschlossen hat, müssen Sie Ihre Benutzeroberfläche nicht aktualisieren (Sie müssen also kein Ereignis für DB-Änderungen abrufen), damit Sie die Inhaltsbeobachtung aufheben.

nun das nächste Mal Benutzer zu diesem Bildschirm kommt, würden Sie wieder die neuesten Daten holen und mit dem DB für Inhaltsänderungen registrieren ...

So der Inhalt Beobachter ist in der Regel eine Beziehung zwischen einer Aktivität und Datenbank (oder spezifische URI). SO würden Sie es registrieren, wenn die Activity gestartet wird und es abzumelden, wenn die Aktivität aus der Sicht geht ..

Hope this helps ...

+0

Sir danke für die wundervolle Erklärung +1 für dich. –

6

lesen Sie bitte einen Link, den Sie auch vorgesehen, dass deutlich erwähnen

Sie registrieren Ihre Beobachter im onResume() Lifecycle-Methode und Sie Heben Sie die Registrierung in der onPause() -Methode auf.

Sobald Sie die Registrierung eines dieser Methoden ist es nicht observe einen beliebigen Wert und geben Sie keine memory leak auch.

@override 

    public void onDestroy() 
    { 

getContentResolver(). 
     unregisterContentObserver(yourObserver); 

    } 

oder Sie können dies tun, auch

@override 

    public void onPause() 
    { 
    getContentResolver(). 
    unregisterContentObserver(yourObserver); 

    } 
+0

Es hängt von Ihnen ab, wo Sie es deregistrieren wollen. – Unknown

2

Im Blog-Post, heißt es:

Wenn Sie einen Inhalt Beobachter registriert haben, ist es Ihre Aufgabe ist es auch zu deregistrieren . Andernfalls würden Sie ein Speicherleck erstellen und Ihre Aktivität würde nie Müll gesammelt werden. So

wenn Ihr Activity geschlossen ist Sie deregistrieren sollte - dies sollte in der Verfahren durchgeführt werden. wird immer aufgerufen, wenn Sie von Ihrem Activity weggehen.

Schauen Sie sich den Lebenszyklus für Activities: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

9

Werfen Sie einen Blick auf die activity lifecycle:

Activity lifecycle

  • Wenn Sie einen Beobachter registrieren in onCreate deregistrieren Sie in onDestroy
  • Wenn Sie Registrieren Sie einen Beobachter in onStart Sie sich abmelden in onStop
  • Wenn Sie einen Beobachter in onResume registrieren Sie in

deregistrieren Da nur eine Aktivität kann zur gleichen Zeit angezeigt werden, würde ich empfehlen die letzte Option.

+0

Dies ist die Antwort, nach der ich gesucht habe! Schön und prägnant, aber mehrere Situationen genau zu adressieren! – YoungCoconutCode

Verwandte Themen