Frage

ich eine Aktivität haben, die einen ServiceConnection an einen Dienst hält. Wenn die Ausrichtung ändert, erscheint die ServiceConnection verloren zu gehen und bekommt erneut erstellt.

Dies ist nicht wünschenswert. Ich möchte es so haben, dass die ServiceConnection durch die Erholung der Aktivität beibehalten wird. Ich suche ein gutes Muster, dass löst dieses Problem.

War es hilfreich?

Lösung

Werfen Sie einen Blick auf Activity.onRetainNonConfigurationInstance () und die zugehörige getLastNonConfigurationInstance () Methoden -. Sie nützlich sein können

Andere Tipps

Leider mit onRetainNonConfigurationInstance / getLastNonConfigurationInstance können Lecks beinhalten. In meinem Fall (Ich verwende eine IntentService eine Datei auf einem Remote-Server laden), war ich meine Verbindung im betrachteten Aktivität wie erklärt:

private ServiceConnection mConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName className, IBinder service) {
        mServiceMessenger = new Messenger(service);
        mConnectedToService = true;
    }

    public void onServiceDisconnected(ComponentName className) {
        mConnectedToService = false;
        mServiceMessenger = null;
    }
};

Die mServiceMessenger ist eine Instanz von Messenger, die mir ein Abbrechen, um die Upload Aufgabe senden.

Dennoch, wenn ich die Lösung mit onRetainNonConfigurationInstance und getLastNonConfigurationInstance getestet, verfolgen ich (dank MAT-Plug-in in Eclipse), dass eine Drehung des Bildschirms viele Lecks meiner Aktivität Kontext beinhaltet.

Um dieses Problem zu lösen (und weil meine Komplexität der Anwendung ermöglicht es mir, dies zu tun), habe ich ein Singleton Gruppierung zusammen alle Elemente Ich brauche die Verbindung zu meinem IntentService (und die Kommunikation mit meiner Aktivität) zu behandeln. Also, wenn Sie den Bildschirm drehen, erstellt die neue Aktivität wird die Verbindung von der Singleton verwalten zurück und es kann ohne Verlust Informationen genutzt werden.

Verwenden Sie Android-Version: configChanges = "Orientierung" in Aktivitätseigenschaft in einem offenkundigen

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top