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

标签 java android multithreading android-activity android-asynctask

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

相关文章:

java - Vaadin 使用 JUnit 测试过滤器

java - 使用并行线程进行不同的网络操作

multithreading - 允许actor定期替换共享的不可变只读状态是 “ok”吗?

android - 如何从 Android 中删除短信。拉德工作室

multithreading - 在与OSX命令行不同的线程中运行程序?

Java:正则表达式:+量词不起作用

java - 如何在 Java 中创建动画 gif?

java - SQL Server 2012 存储过程在 JDBC 中不返回任何结果

android - 使用 Flutter 确认购买

android - Kotlin 多平台库接口(interface)的暴露类型未解析