2015-05-14 130 views
0

我有一个UI线程(MainActivity)调用一个AsynTask对象(DownloadManager),它反过来调用3个线程(DownloaderThread)。Android暂停/恢复AsynTask

如何在不暂停AsynTask或UI线程的情况下暂停/恢复3个DownloaderThreads?

以下是我目前为暂停功能实现的代码,但当单击“暂停”按钮时,应用程序会崩溃,并显示对话框:“应用程序已停止”。代码:

下载管理器(AsynTask):

public void onPause() { 
    try{ 
     t0.wait(); 
     t1.wait(); 
     t2.wait(); 
     this.wait(); 
    }catch (InterruptedException ex){ 

    } 
} 

DownloaderThread(实现Runnable并传递到一个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; 
    } 
} 
+0

我已经了解到,它不可能调用DownloaderThread的onPause方法,而不使用某种线程来运行对象映射。如果有人可以指导如何实现这一点,那将是很棒的.. –

回答

0

你真的不能暂停的AsyncTask一旦爆发。但是,当活动暂停/销毁时,您可以存储进度,并在您回到原始活动时从进度开始。但我建议完成任务的最佳方式是使用Service