当前位置: 首页 > 面试题库 >

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

彭宏深
2023-03-14
问题内容

我不确定这是怎么回事。基本上,我有一个ASyncTask类,它在后台照常进行操作。完成后我想做点事。现在,在您继续说“只使用onPostExecute()”之前,有一个陷阱。我需要运行的方法是在活动中,而不是在Task类中。

我看到的方式有两种选择。

A:

    CustomTask task = new CustomTask();
    task.execute(passedParams);
            //when(task.execute is finished)
            {
                doX();
            }

我希望我可以这样做,因为它是如此的简单,可以让我检查任务何时完成,而不必经常轮询活动和getStatus()。我不认为我会很幸运,但是如果有人能做到这一点,那就太好了

B:

将活动作为参数传递给ASyncTask。这很杂乱,我对使用它并不满意,但是从它和对象引用中可以看出来,我不知道它是否可以工作

    CustomTask task = new CustomTask();
    task.execute(passedParams,MyActivity);

然后在Tasks onPostExecute中,我可以让它调用MyActivity.doX();。

C:

第三种方法是使asynctask在活动本身中成为私有类,但我真的很想将其分开。可重用性和其他方面–

有什么想法吗?

总而言之,task.execute完成后需要doX()。任何想法表示赞赏。

D:

好吧,我知道我在这里。我一直在思考新的解决方案。可以从任何地方调用的类方法或静态方法。

public class ProfileSettings extends Activity
{
      public static void doX()
      {
          //Logic...
      }
}

从AsyncTask

MyActivity.doX();

问题答案:

选项B应该起作用,有时是一个不错的选择,但是有时我为此使用匿名类。当您通过活动进行调用时:

CustomTask task = new CustomTask() {
    @Override
    protected void onPostExecute(Long result) {
        super.onPostExecute(result);
        MyActivity.this.doX();
    }
}.execute();


 类似资料:
  • 我有一个执行一些网络操作的自定义视图。视图根据该操作结果构建UI。 该视图包含通过Internet获取的卡的列表。此视图用于多个地方。假设其中一个是我的碎片。 下面是我在Fragment中的操作: 我的自定义视图如下所示: 好了,现在当用户从我的应用程序切换到另一个应用程序时,我的碎片可能会被销毁。我想保存我的自定义视图的状态。因此,我的观点不需要再从互联网上获取信息。因此,我在中附加了以下数据(

  • 如果你希望在每次运行 Puppet 之前执行命令,可以在配置文件中使用 prerun_command 配置。 类似地,你也可以使用 postrun_command 配置运行 Puppet 之后需要执行的命令。 这种机制为 Puppet 与其他软件的集成提供了强大的钩子,甚至可以触发其他机器上的事件。 prerun 和 postrun 命令必须能成功运行(即其返回的状态码为 0),否则 Puppet

  • 我正在Java的Android应用程序中工作,其中调用类并在OnCreateView方法中进行测量。然而,一旦完成,我必须自动发送他的测量结果。但我不能。是否有继承自:java.lang.对象android.app.片段的方法,可以在OncreateView进程之后执行函数。因为目前数据已经发送,但还没有时间填充。 谢谢你的帮助

  • 问题内容: 我想知道以下代码的行为背后的机制是什么: 我的理解是不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在命令后执行代码(我查看了快速源,但它似乎不是异步函数)。 还有其他我可能会想念的东西吗? 问题答案: 当然可以结束HTTP响应,但是它对您的代码没有做任何特殊的事情。 即使您已结束回复,也可以继续做其他事情。 但是,您 无法 做的是利用进行任何有用的操作。由于响应

  • 我想为每个特定的功能文件指定特定的设置和拆卸步骤。我已经看到了允许代码在每个场景之前执行的钩子,以及在每个功能之前执行代码的钩子。但是我想指定代码在所有场景为一个特定功能运行之前和之后运行一次。 这有可能吗?

  • null java.lang.IllegalStateException:在onSaveInstanceState e/androidRuntime(9008):at android.support.v4.app.fragmentManagerImpl.checkStateLoss(fragmentManager.java:1354)e/androidRuntime(9008):at androi