【问题标题】:Can run multiple task in a Single async task?可以在单个异步任务中运行多个任务吗?
【发布时间】:2013-03-01 05:07:09
【问题描述】:

我有 3 个活动 A、B、C。在所有 3 个活动中,我都在使用异步任务。是否可以在单个异步任务(通用代码)下运行所有​​异步任务。

如果可能
1.如何查看从哪个activity调用了哪个task?
2. 如何查看任务是否完成?

【问题讨论】:

  • A、B 和 C 在各自的 AsyncTask 中运行相同的操作吗?还是他们在后台做不同的事情?
  • 他们做的不一样
  • 如果是这种情况,那么我会说你实际上甚至不想同时运行所有 3 个 AsyncTasks。你要么做太多工作(例如,在它永远不会显示给用户),或者在用户查看 C 时以错误的顺序执行工作(例如,首先下载 A、B 第二和 C 第三)。在这种情况下也可能将通用代码放入通用超类不值得努力(AsyncTasks 已经是非常简单的构建块了)。

标签: android android-asynctask android-activity


【解决方案1】:

创建你的 AsyncTask 类

public class MyTask extends AsyncTask<Void, Void, Void>
{

    // Use a WeakReference instead of holding the Activity object
    private WeakReference<Activity> mActivity;

    public MyTask(Activity activity)
    {
        mActivity = new WeakReference<Activity>(activity);
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        // do common work
        return null;
    }

    public Activity getActivity()
    {
        return mActivity.get();
    }

    public void setActivity(Activity activity)
    {
        mActivity = new WeakReference<Activity>(activity);
    }

}

在每个活动中:

MyTask t = new MyTask(YourActivity.this)
    {
        @Override
        protected void onPostExecute(Void result)
        {
            super.onPostExecute(result);
            // do some work when finished           
        }
    };

【讨论】:

    【解决方案2】:

    您可能想要一个通用异步任务来执行长时间运行的任务,并且您想要一个回调机制来使用它, 您可以通过将异步任务类作为单独的抽象并实现回调接口来实现相同的功能。 Async Class with callback

    【讨论】:

    • 这正是我在上面的评论中提出这个问题的原因。如果所有这些活动都需要在后台运行相同的操作(例如,查询一些 ContentProvider),那么带有回调的 AsyncTask 将是方式我也会实现它。
    • @baske your answer stackoverflow.com/questions/13966343/… in this question也有助于理解我何时第一次使用异步任务
    【解决方案3】:

    是的,这是可能的。

    1. 添加一个参数,用于指示调用的Activity
    2. Look at JavaDoc of AsyncTask method onPostExecute()

    【讨论】:

    • 我认为传递一个参数来指示调用 Activity 不如提供 Pragnani 的答案中描述的回调机制那么优雅。
    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多