2013-03-13 85 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   
     } 
    };