2016-07-31 7 views
0

Ich möchte eine Aktivität als Ladeaktivität für meine App für einige asynchrone Tasks angeben.Android Starten Sie eine Aktivität in preExecute und beenden Sie sie in postExecute während der Ausführung von Async Task

es wird während preExecute gestartet werden und wird in postExecute fertig sein, wie man das macht?

  @Override 
      protected void onPreExecute() 
      { 
       startActivity(new Intent(SearchActivity.this,LoadingActivity.class)); 
      } 
      @Override 
      protected void onPostExecute(String result) 
      { 
       // i want to finish loading activity here. 
      } 
+0

können Sie es durch Ladedialog oder etwas tun. Keine Notwendigkeit, es durch Aktivität zu tun .. !! –

+0

das ist die Anforderungen meiner Aufgabe –

Antwort

4

So funktioniert Android einfach nicht.

Es ist immer eine Aktivität aktiv, und wenn Sie eine AsyncTask starten, tun Sie dies im Kontext der aktuellen Aktivität.

Während Sie also technisch eine Aktivität von der AsyncTask aus starten könnten, würde der übergeordnete Kontext (die Aktivität, die die AsyncTask gestartet hat) inaktiv werden. Die AsyncTask würde weiterhin ausgeführt werden (das ist eigentlich ein großes Problem mit AsyncTasks), würde aber wahrscheinlich abstürzen - und selbst wenn nicht, wäre das Verhalten undefiniert.

Shubham Nandanwars Antwort sieht so aus, als ob es funktionieren sollte, ist aber nicht der richtige Weg, dies zu erreichen. Sie sollten überdenken, was Sie im Zusammenhang mit der Art und Weise tun möchten, wie Aktivitäten und deren Lebenszyklen funktionieren sollen.

Ich würde vorschlagen, die gewünschte Aktivität einfach zu starten und dann eine AsyncTask in dieser Aktivität zu verwenden, um die erforderlichen Arbeiten auszuführen und die Aktivität aus der Aktivität selbst zu beenden, wenn die Arbeit erledigt ist.

Besser noch, finden Sie eine bessere Möglichkeit, Hintergrundverarbeitung (z. B. RxJava) zu tun, und beseitigen Sie die AsyncTask.

+0

in meinem Fall kann ich meine Logik in der "Ladeaktivität" nicht tun und die Aktivität aus der Aktivität selbst beenden meine Aufgaben sind über das Laden von Daten aus der API und behandeln mit dem Ergebnis von onPostExecute in zurückgegeben verschiedene Möglichkeiten, wenn ich Ihren Ansatz verwendet habe, werde ich "Lade" Aktivität für jede Aufgabe erstellen. Ich möchte nur diese "Lade-Aktivität" nur als "Ladedialog" –

+0

mit GreyBeardedGeek einverstanden machen. @AsmaaRashad dies ist nicht möglich in Android .. !! –

+1

Es gibt eigentlich keinen Grund, dass die von Ihnen ausgeführten Aufgaben durch die aktive Aktivität eingeschränkt werden müssen. Es sollte alles auf einem Hintergrundthread getan werden. Ich bin mir nicht sicher, was Sie mit onPostExecute tun wollen, aber was auch immer es auf dem UI-Thread passiert, verschieben Sie diese Entscheidung einfach von der AsyncTask und legen Sie sie stattdessen in die übergeordnete Aktivität. Sie benötigen keine separate Aktivität für jede Aufgabe. Auch hier sollten Sie nachlesen, wie Kontexte funktionieren und wie AsyncTasks funktionieren, und sie wie beabsichtigt verwenden, anstatt zu versuchen, Dinge auf eine Weise zu tun, die nicht unterstützt wird. – GreyBeardedGeek