[英]Android pause/resume AsynTask
我有一個UI線程(MainActivity)調用一個AsynTask對象(DownloadManager),該對象又調用了3個線程(DownloaderThread)。
如何在不暫停AsynTask或UI線程的情況下暫停/恢復3個DownloaderThreads?
以下是我目前為暫停功能實現的代碼,但是單擊“暫停”按鈕時,應用程序崩潰並顯示對話框:“應用程序已停止”。 碼:
DownloadManager(AsynTask):
public void onPause() {
try{
t0.wait();
t1.wait();
t2.wait();
this.wait();
}catch (InterruptedException ex){
}
}
DownloaderThread(實現Runnable,並傳遞給DownloadManager中的Thread實例:
public class DownloaderThread implements Runnable {
private Object mPauseLock;
private Boolean mPaused;
private Boolean mFinished;
public void run(){
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
try{
while(!mFinished){
//do something
synchronized (mPauseLock){
while (mPaused){
try{
mPauseLock.wait();
}catch (InterruptedException e){
}
}
}
}
}
}
public void onPause(){
synchronized (mPauseLock){
mPaused = true;
}
}
一旦啟動AsyncTask,您就無法真正暫停它。 但是,您可以在活動被暫停/銷毀時存儲進度,並在返回原始活動后從進度開始。 但是我建議為您的方案完成任務的最佳方法是使用Service 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.