2016-04-05 6 views
0

Ich weiß, das wurde schon oft gefragt, aber immer noch viele neue Entwickler wie mich finden es schwierig.Um zu vermeiden, memory leaks welche context sollte verwendet werden ?. Irgendwo fand ich, dass wir sollten getApplicationContext() und irgendwo, die versuchen, http://android-developers.blogspot.in/2009/01/avoiding-memory-leaks.htmlcontext-activity als possible.Also zu verwenden, sagtWelcher Kontext? Um Memory Leaks zu vermeiden

Try using the context-application instead of a context-activity 

Für zB

welchem ​​Kontext zu RecyclerView Adapter oder zu einem Custom Dialog Class

Ein Weg passieren Ich fand, ist, Kontext zum Adapter auf diese Weise zu übergeben

recyclerview.setAdapter(new YourAdapter(new WeakReference<Activity>(ActivityName).get())); 

Ist meine Art, den Kontext zu überschreiten, richtig?

Bitte geben Sie eine detaillierte Erklärung, damit auch andere davon profitieren. Dank

Antwort

2

welchem ​​Kontext zu RecyclerView Adapter übergeben oder an ein Dialogfeld-Klasse

Wenn mit UI Bedenken tun haben, immer die Activity passieren.

Ist meine Art, Kontext zu übergeben, richtig?

sollten Sie keine WeakReference zum Activity zur Verwendung in einem RecyclerView benötigen.

Um Speicherlecks zu vermeiden, welcher Kontext sollte verwendet werden?

Das kann im Allgemeinen nicht beantwortet werden. Die einfachste Grundregel lautet: Verwenden Sie Application als Context, wenn Sie befürchten, dass die Context im Geltungsbereich static enthalten sein könnte, z. B. in einem Objekt, auf das von einem static Datenelement verwiesen wird, oder in einem Thread. Andernfalls verwenden Sie eine stärker fokussierte Context (z. B. Ihre Activity, Ihre Service).

Dave Smith's blog post on contexts ist die beste einseitige Ressource zu dem Thema, das ich gefunden habe.

+0

Aber wenn ich einen weakref Kontext verwende, wird es irgendein Problem verursachen? –

+0

@SonaliPawar: Möglicherweise haben Sie Probleme mit der Leistung, da Sie ständig durch Sperren gehen. – CommonsWare

+0

Was, wenn ich Aufgaben im Zusammenhang mit dem Netzwerk ausführen oder Dialoge vom Adapter anzeigen muss, ist der Aktivitätskontext geeignet? –