Gegeben dieser Code:
%Vor%Ich erhalte den Kompilierfehler: Ich kann keinen statischen Verweis auf die nicht statische Methode setStatus (int) ...
machenDas 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% Versuchen Sie es mit WeakReference
, wie in diesem Artikel beschrieben .
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.
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
Tags und Links android android-actionbar handler