gpt4 book ai didi

java - 在 ASyncTask.execute() 之后从 Activity 执行 x()

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:04 24 4
gpt4 key购买 nike

这是一个我不确定如何着手的问题。基本上我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com