我正在启动一项活动,一旦用户登录,我想刷新主要活动。从登录用户加载数据。
如图像和名称。我已经完成了所有这些工作。
我只需要知道是否可以再次启动另一个活动并运行其异步任务。从另一个活动中启动一个意图?
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
据我所知,AsyncTasks不应该被重用。它们应该运行一次,然后你可以根据需要创建一个新的。
答案 2 :(得分: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()
。