2011-08-14 78 views
0

我正在啓動一項活動,並且一旦用戶登錄,我想刷新主要活動。從登錄用戶加載數據。如何刷新另一個acctivity的asyncTask?

如圖像和名稱。我已經完成了所有這些設置。

我只需要知道是否可以啓動另一個活動並再次運行它的異步任務。從另一個活動內部啓動一個意圖?

回答

2

目前尚不清楚你的設計究竟是什麼,但是如果你需要從兩個不同的活動中使用相同的AsyncTask,它應該是一個單獨的類,而不是綁定到特定的活動。您可以讓這兩個活動實現一個通用接口,以便AsyncTask不需要知道它正在更新哪個活動。然後通過傳遞對封閉活動的引用來實例化任務,並根據需要啓動它。一個活動不需要啓動另一個活動。

喜歡的東西:

public interface UserActivity { 
    void updateUserData(UserData userData); 
} 

public class Activity1 implements UserActivity { 

    public void onStart() { 
     UpdateUserDataTask task = new UpdateUserDataTask(this); 
     task.execute(); 
    } 

    public void updateUserData(UserData userData) { 
     // update 
    } 
} 

public class UpdateUserDataTask extends AsyncTask<Void, Void, UserData> { 
    UserActivity userActivity; 

    public UpdateUserDataTask(UserActivitiy userActivity) { 
     this.userActivity = userActivity; 
    } 

    // doInBackground, etc implementation. 

    protected void onPostExecute(UserData userData) { 
     userActivity.updateUserData(userData); 
    } 
} 
+0

你能舉個例子說明你的意思嗎? –

+0

查看更新的帖子以獲取代碼示例。 –

+0

那麼我如何從另一個活動啓動界面? –

0

據我所知,不應該AsyncTasks被重用。他們應該運行一次,然後你可以創建一個新的,如果你需要它。

+0

您的權利,但我想要做的是刷新活動時,在另一項活動中提供某些信息。 –

0

一旦AsyncTask執行一次,就不能再執行一次。但是,您可以執行的操作是使用以下「onProgressUpdate()」和「publishProgress()」進行「刷新」控制。請注意,這隻適用於一次刷新。如果您希望語義更加正確,則可以在onProgressUpdate()中執行「正常」操作,並使用onPostExecute()進行刷新。

public class MyAsyncTask extends AsyncTask<Void, String, Void> { 

    private boolean isRefresh = false; 
    @Override 
    protected Void doInBackground(Void... arg0) { 
     while (!isRefresh){ 
      //Perform your normal operation 
     } 

    //When isRefresh is true, you want to refresh. 
     this.publishProgress(values); 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(String... values) { 
     // Refresh code here 
     super.onProgressUpdate(values); 
    } 

    public void refreshTask(){ 
     this.isRefresh = true; 
    } 

} 

然後,您可以維持的MyAsyncTask對象的引用並在其上調用refreshTask(),每當你想刷新。