Führen Sie nach ASyncTask.execute () x () von Activity aus

Ich bin mir nicht sicher, wie ich vorgehen soll. Grundsätzlich habe ich eine ASyncTask-Klasse, die im Hintergrund wie gewohnt arbeitet. Ich würde gerne etwas tun, wenn es fertig ist. Bevor Sie jetzt weiterspringen und "benutze einfach onPostExecute ()" sagen, gibt es einen Haken. Die Methode, die ich ausführen muss, befindet sich in der Aktivität und nicht in der Task-Klasse.

So wie ich es sehe, habe ich 2 Möglichkeiten.

EIN:
<code>    CustomTask task = new CustomTask();
    task.execute(passedParams);
            //when(task.execute is finished)
            {
                doX();
            }
</code>

Ich hoffe, ich kann es auf diese Weise tun, da es so einfach ist und ich überprüfen kann, wann die Aufgabe abgeschlossen ist, ohne sie ständig nach Aktivität und getStatus () für die Aktivität abfragen zu müssen. Ich glaube nicht, dass ich so viel Glück haben werde, aber wenn jemand eine Möglichkeit dazu hat, wäre das großartig

B:

Übergeben Sie die Aktivität als Parameter an ASyncTask. Das ist chaotisch und ich bin nicht glücklich darüber, es zu benutzen, aber abgesehen davon und der Objektreferenz, weiß ich nicht, ob es funktionieren wird

<code>    CustomTask task = new CustomTask();
    task.execute(passedParams,MyActivity);
</code>

Dann kann ich in den Tasks onPostExecute einfach MyActivity.doX () aufrufen.

C:

Ein dritter Weg wäre, die asynctask zu einer privaten Klasse in der Aktivität selbst zu machen, aber ich möchte sie wirklich getrennt halten. Wiederverwendbarkeit und was nicht -

Irgendwelche Gedanken dazu?

Zusammenfassend muss doX () nach Abschluss von task.execute ausgeführt werden. Irgendwelche Ideen geschätzt.

D:

Ok, ich weiß, dass ich hier auf einer Rolle bin. Ich denke mir immer wieder neue Lösungen aus. Eine Klassenmethode oder statische Methode, die von jedem beliebigen Ort aus aufgerufen werden kann.

<code>public class ProfileSettings extends Activity
{
      public static void doX()
      {
          //Logic...
      }
}
</code>

Aus AsyncTask

<code>MyActivity.doX();
</code>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage