这是一个我不确定如何着手的问题。 基本上我有一个 ASyncTask 类,它在后台像往常一样工作。我想在它完成后做点什么。现在,在您跳到前面说“只需使用 onPostExecute()”之前,有一个陷阱。我需要运行的方法在 Activity 中而不是任务类中。
在我看来,我有 2 个选择。
答:
CustomTask task = new CustomTask();
task.execute(passedParams);
//when(task.execute is finished)
{
doX();
}
我希望我可以这样做,因为它是如此简单,并且让我可以检查任务何时完成,而不必不断地轮询它的 Activity 和 Activity 的 getStatus()。 我不认为我会这么幸运,但如果有人有办法做到这一点,那就太好了
乙:
将 Activity 作为参数传递给 ASyncTask。这很乱,我不喜欢使用它,但除了那个和对象引用之外,我不知道它是否有效
CustomTask task = new CustomTask();
task.execute(passedParams,MyActivity);
然后在 Tasks onPostExecute 中,我可以让它调用 MyActivity.doX();
C:
第三种方法是让 asynctask 成为 Activity 本身的私有(private)类,但我真的很想将它分开。可重用性及其他 -
对此有什么想法吗?
总而言之,task.execute 完成后需要执行 doX()。任何想法表示赞赏。
D:
好的,我知道我在这里很顺利。我一直在想新的解决方案。可以从任何地方调用的类方法或静态方法。
public class ProfileSettings extends Activity
{
public static void doX()
{
//Logic...
}
}
来自异步任务
MyActivity.doX();
最佳答案
选项 B 应该可行,有时是一个不错的选择,但有时我为此使用匿名类。当您从 Activity 中调用它时:
CustomTask task = new CustomTask() {
@Override
protected void onPostExecute(Long result) {
super.onPostExecute(result);
MyActivity.this.doX();
}
}.execute();
关于java - 在 ASyncTask.execute() 之后从 Activity 执行 x(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115243/