2013-03-13 152 views
0

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

如果可能的话
1.如何检查从哪个活动调用哪个任务?
2.如何检查任务是否完成?

+0

做,B和C运行在各自的AsyncTasks相同的操作?或者他们在背景中做了不同的事情? – baske 2013-03-13 10:23:51

+0

他们正在做的不同 – Vignesh 2013-03-13 11:25:12

+0

如果是这样的话,那么我会说你实际上甚至不想在一个中运行全部3个AsyncTasks ..你要么做了太多的工作(例如,当它是下载活动B的东西从未向用户展示过),或者在用户正在查看时以错误的顺序进行工作(例如,先下载A,B秒和C三)。将通用代码放入通用超类中可能在这种情况下也不值得努力(AsyncTasks已经非常简单的构建块)。 – baske 2013-03-13 15:53:53

回答

1

可能是你想为用于执行长时间运行TAKS能够在通用异步任务,你想回调机制使用它, 您可以通过将异步任务类作为单独的摘要并通过实现回调接口来实现。 Async Class with callback

+0

这就是为什么我在上面的评论中提出问题的原因。如果所有这些活动都需要在后台运行相同的操作(例如,查询某个ContentProvider),那么带回调的AsyncTask也是我将实现它的方式。 – baske 2013-03-13 10:26:46

+0

@baske你的答案http://www.stackoverflow.com/questions/13966343/progress-dialog-is-not-displaying-in-async-task-when-asynctask-is-called-fromsese在这个问题上也帮助了解我第一次使用异步任务时的情况 – Pragnani 2013-03-13 10:48:20

0

创建的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   
     } 
    };