Android: Nicht statische Methoden von einer statischen Handler-Klasse aufrufen

8

Gegeben dieser Code:

%Vor%

Ich erhalte den Kompilierfehler: Ich kann keinen statischen Verweis auf die nicht statische Methode setStatus (int) ...

machen

Das macht Sinn, weil getActionBar () in setStatus () eine nicht statische Methode ist.

Ich habe die Handler-Klasse wegen der Warnung statisch gemacht: Diese Handler-Klasse sollte statisch sein oder es könnten Lecks auftreten.

Die Frage: Wie kann ich innerhalb des statischen Handlers auf die Methode setStatus () zugreifen?

EDIT: neuer Handler-Code ist die Antwort.

%Vor%     
vedavis 06.08.2012, 12:24
quelle

3 Antworten

9

Versuchen Sie es mit WeakReference , wie in diesem Artikel beschrieben .

    
Alex Lockwood 06.08.2012, 16:38
quelle
1

Da Sie jetzt WeakReference verwenden, gibt mTarget.get() möglicherweise null zurück. In Ihrem bearbeiteten Code prüfen Sie nicht, ob target null ist, bevor Sie target.setStatus(R.string.title_not_connected) ausführen. Dies kann einen NullPointerException werfen, wenn das Objekt der schwachen Referenz GC'ed wurde.

    
NickL 04.10.2012 12:01
quelle
0

In der onDestroy-Methode meiner Aktivität rufe ich auf:

%Vor%

Dies wird die Warnung "Diese Handler-Klasse sollte statisch sein oder Lecks könnten auftreten" nicht beseitigen, aber ich glaube, dass sie die Nachricht zerstört und somit das Leck stoppt. Meine Handler-Klasse ist eine innere nicht-statische Klasse meiner Aktivität. Meine Aktivität hat eine Instanz von MyHandler myHandler.

Wenn ich dies tue, wird die HandleMessage-Methode des Handlers nicht aufgerufen, was bedeutet, dass die Nachricht mit dem Handler, der einen Verweis auf die Aktivität enthielt, zerstört wurde. Ich bin offen für Kommentare, da ich es nicht mit irgendwelchen Lecktest-Tools getestet habe. Hier ist, wo ich die Idee kopiert: Ссылка Antworter: CyrilJanuar 15, 2013 um 7:50 Uhr

    
flobacca 12.02.2013 01:45
quelle