Korrekter Kontext zur Verwendung in Rückrufen

8

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.

    
Rarw 14.08.2013, 19:38
quelle

2 Antworten

7

Verwenden Sie den Kontext der Aktivität. Beispiel:

%Vor%

MyAsyncTask-Konstruktor:

%Vor%

Um die MyActivity-Methode methodToCall() von innerhalb von MyAsyncTask aufzurufen:

%Vor%

Bearbeiten 1:

Ich vermute, Ihr Problem ist das:

%Vor%

Workaround:

  • Deklarieren Sie eine Methode in MyActivity: getContext()

    %Vor%
  • Verwenden Sie MyActivity.this anstelle von this .

  • Eine andere Möglichkeit besteht darin anzugeben, dass MyActivity die Schnittstelle implementiert:

    %Vor%
Vikram 14.08.2013, 19:48
quelle
0

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:)

    
TeeTracker 14.08.2013 19:51
quelle