2016-07-05 11 views
0

Meine Android-App behandelt die Geschäftslogik in einem Thread, der mithilfe von AsyncTask implementiert wurde und jetzt als BL-Thread bezeichnet wird.Anhalten und Fortsetzen von AsyncTask Android

BL möchte den Benutzer auffordern, einige persönliche Daten (Name, Passwort ...) einzugeben, indem ein Fragment auf dem UI-Thread hinzugefügt wird. An dieser Stelle möchte ich den BL-Thread stoppen, warten, bis der Benutzer seinen Namen, das Passwort ... eingibt, die OK-Taste drücken und dann den BL-Thread fortsetzen.

Wie kann ich das auf Android erreichen?

Antwort

0

Pause AsynkTask ist nicht die beste Wahl. Dennoch können Sie ein Beispiel finden, wie Sie AsynkTask in der Google-Beispielanwendung DisplayingBitmaps in der Klasse ImageWorker pausieren.

private class BitmapWorkerTask extends AsynkTask<Void, Void, BitmapDrawable> { 
    @Override 
    protected BitmapDrawable doInBackground(Void... params) { 
    synchronized (mPauseWorkLock) { 
     while (mPauseWork && !isCancelled()) { 
     try { 
      mPauseWorkLock.wait(); 
     } catch (InterruptedException e) {} 
     } 
    } 
    } 
    ... 
} 

public void setPauseWork(boolean pauseWork) { 
    synchronized(mPauseWorkLock) { 
    mPauseWork = pauseWork; 
    if (!mPauseWork) { 
     mPauseWorkLock.notifyAll(); 
    } 
    } 
} 
0

AsyncTask soll eine einmalige/einmalige Aufgabe ausführen.

Das ist nicht eine gute Verwendung von AsyncTask. AsyncTasks sollten funktionieren und erledigt werden, nicht versuchen, herumzuhängen.

Sie finden schmutzige Lösungen im Web mit Thread.sleep() zum Beispiel. Das sind wirklich schlechte Lösungen.

Wenn Sie zwei unterschiedliche Verfahren Sie zwei verschiedene Aufgaben erstellen, sollten

Für Ihre Frage können Sie cancel() Ihr Hintergrund-Thread oder asynsTask, und wenn vielleicht

0

Sie einen neuen mit aktualisierten Parametern benötigt erstellen sollte nicht alles in einem AsyncTask ..

Beim Erstellen des Fragments mit der OK-Schaltfläche definieren neue Schaltfläche Listener, die neue Thread erstellen und den Rest der Arbeit tun wird.

Sie könnten Service- oder Serviceabsicht und nicht AsyncTask dafür verwenden, damit Sie die Aufgabe trennen können, um Funktionen zu separieren und trotzdem den Hintergrund laufen zu lassen.

Verwandte Themen