Der Titel sagt so ziemlich alles. Wenn Sie einen Rückruf von einer Klasse zu einer anderen haben und eine Methode innerhalb des Callbacks aufrufen müssen, die einen Kontext erfordert, welchen Kontext verwenden Sie? Ein häufiges Beispiel wäre ein AsyncTask
mit einem Callback zu Activity
oder Fragment
, das es verwendet hat.
Ich versuche generell, getApplicationContext()
zu vermeiden, aber ich kann this
nicht als Kontext innerhalb eines Callbacks verwenden. Ist dies der Fall, wenn ein breiterer Kontext angemessen ist?
Um weiter zu klären, denke ich an einen Callback mit einer Schnittstelle zwischen einer AsyncTask und einer Aktivität. Sobald ich innerhalb der überschriebenen Schnittstellenmethode bin, kann ich den Aktivitätskontext nicht von dort bekommen.
Verwenden Sie den Kontext der Aktivität. Beispiel:
%Vor%MyAsyncTask-Konstruktor:
%Vor% Um die MyActivity-Methode methodToCall()
von innerhalb von MyAsyncTask
aufzurufen:
Bearbeiten 1:
Ich vermute, Ihr Problem ist das:
%Vor%Workaround:
Deklarieren Sie eine Methode in MyActivity: getContext()
Verwenden Sie MyActivity.this
anstelle von this
.
Eine andere Möglichkeit besteht darin anzugeben, dass MyActivity die Schnittstelle implementiert:
%Vor%Es ist ein Thema aber "Lecks". Erstens ist die zu erledigende Aktivität nicht gut. Laut einigen anderen Vorschlägen sollten Leute getApplication oder getApplicationContext verwenden. Aber Sie können WeakReference für Ihren Wrapper verwenden, d. H .:
%Vor%Denken Sie daran, statisch zu verwenden, um Ihre Klasse zu markieren. Dies könnte potenzielle "Dies" für Ihre Host-Aktivität verhindern.
Vielleicht habe ich Ihnen ein paar Vorschläge gemacht, vielleicht nichts:)
Tags und Links android android-asynctask android-context callback