簡體   English   中英

Android暫停/恢復AsynTask

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM