【问题标题】:Stop AsyncTask which is waiting for a synchronous method停止等待同步方法的 AsyncTask
【发布时间】:2012-10-19 07:40:52
【问题描述】:

我想停止/取消正在等待同步方法的未决 AsyncTasks。

下面是我的代码:(它启动了所有 21 个 AsyncTasks。我想在中间停下来,例如在 10 个 asynctasks 完成之后。有人可以建议一种方法吗?

 for(int i=0;i<21;i++){

   SafeAsyncTask<String, Void, LinkInfo[]> mGetLinkInfo = new SafeAsyncTask<String,Void,LinkInfo []>() {

                protected LinkInfo[] doInBackground(String... v) {
                    return downloadLinks(v[0]);
                }

                protected void onPostExecute(LinkInfo[] links) {


                }
            };

            mGetLinkInfo.safeExecute(i);
 }
   synchronized void downloadLinks(){
         //Lengthy process
     }

【问题讨论】:

    标签: java android multithreading android-asynctask


    【解决方案1】:

    嗯,使用您的代码,您将获得 21 个不同的 AsyncTask,它们同时并行运行。所以你需要“在 10 个异步任务完成后停止”没有意义......

    也许您会想要一个独特的异步任务,完成工作的 21 个不同部分。在每个部分之间,您可以插入一个停止条件:

       SafeAsyncTask<Void, Void, LinkInfo[]> mGetLinkInfo = new SafeAsyncTask<Void,Void,LinkInfo []>() {
    
                    protected LinkInfo[] doInBackground() {
                         LinkInfo[] infos = new LinkInfo[21]; // Is this what you want ?
                         for(int i=0;i<21;i++) {
                             // Do part i/21 of the job
                             infos[i] = downloadLinks(i);
                             if (getStopCondition()) break;
                             }
                         return infos;
                         }
                };
    
        mGetLinkInfo.safeExecute();
    

    【讨论】:

    • 我必须并行运行所有任务。这就是场景。你有什么解决办法吗?
    • 那么表示所有步骤都在运行。然后我认为你必须得到所有21个任务的线程数组,然后向每个任务发送一个中断......但这意味着中断必须由你的downloadLinks()方法处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多