我正在啓動一項活動,並且一旦用戶登錄,我想刷新主要活動。從登錄用戶加載數據。如何刷新另一個acctivity的asyncTask?
如圖像和名稱。我已經完成了所有這些設置。
我只需要知道是否可以啓動另一個活動並再次運行它的異步任務。從另一個活動內部啓動一個意圖?
我正在啓動一項活動,並且一旦用戶登錄,我想刷新主要活動。從登錄用戶加載數據。如何刷新另一個acctivity的asyncTask?
如圖像和名稱。我已經完成了所有這些設置。
我只需要知道是否可以啓動另一個活動並再次運行它的異步任務。從另一個活動內部啓動一個意圖?
目前尚不清楚你的設計究竟是什麼,但是如果你需要從兩個不同的活動中使用相同的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);
}
}
據我所知,不應該AsyncTasks被重用。他們應該運行一次,然後你可以創建一個新的,如果你需要它。
您的權利,但我想要做的是刷新活動時,在另一項活動中提供某些信息。 –
一旦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()
,每當你想刷新。
你能舉個例子說明你的意思嗎? –
查看更新的帖子以獲取代碼示例。 –
那麼我如何從另一個活動啓動界面? –