当前位置: 首页 > 知识库问答 >
问题:

Android-AsyncTask,是否所有progressPublish调用都已发布?

高英彦
2023-03-14

官方:

http://developer.android.com/reference/android/os/asynctask.html

onProgressUpdate(Progress...),在调用publishProgress(Progress...)后在UI线程上调用.执行的时间未定义。此方法用于在后台计算仍在执行时,在用户界面中显示任何形式的进度。例如,它可以用于动画进度条或在文本字段中显示日志。

它还说时间是不确定的,而不是东西真的被出版了。

我可以看到一个案例,只公布最新的进度提交,并为所有。

假设有一个巨大的缺失尖峰,并且已经发布了100个进度更新,为什么不丢弃旧的99--如果它是进度条之类的,或者显示当前正在加载的内容,为什么不费劲地轻弹过去呢?

但是,如果它不丢弃任何进度更新并按顺序发布它们,这将是一种从后台线程“流式”任何类型的列表结构的好方法,而不是存储所有这些结果并在完成时返回一个列表。

异步任务是否按接收的顺序发布所有进度更新(在运行post execute之前)

我不能测试行为,因为它不是确定性的,我可能是幸运的,或者我的设备可能是快速的,这就是为什么我问。您不应该测试(并从其中推断)任何与线程有关的东西(如果这样做节省了一个新手,那么它是值得编写的)

共有1个答案

苏培
2023-03-14

这是消息来源。这里的相关部分似乎确实表明,对PublishProgress的每次调用都会导致对OnProgressUpdate的附带调用。

/**
     * This method can be invoked from {@link #doInBackground} to
     * publish updates on the UI thread while the background computation is
     * still running. Each call to this method will trigger the execution of
     * {@link #onProgressUpdate} on the UI thread.
     *
     * {@link #onProgressUpdate} will note be called if the task has been
     * canceled.
     *
     * @param values The progress values to update the UI with.
     *
     * @see #onProgressUpdate
     * @see #doInBackground
     */
    protected final void publishProgress(Progress... values) {
        if (!isCancelled()) {
            sHandler.obtainMessage(MESSAGE_POST_PROGRESS,
                    new AsyncTaskResult<Progress>(this, values)).sendToTarget();
        }
    }
 类似资料:
  • 问题内容: 我需要进行以下测试,以验证是否已调用Person类的所有getter。到目前为止,我已经使用了Mockito的verify()来确保每个getter都被调用。有没有办法通过反思做到这一点?可能是将新的吸气剂添加到Person类的情况,但是测试会错过这一点。 问题答案: 通常,不要嘲笑被测类。如果您的测试是针对Person的,则您永远都不会看到它,因为这很明显地表明您正在测试模拟框架而不

  • 在过去的几天里,我一直在使用这段代码,直到今天,它一直工作得很好,但由于某种原因,异步任务已经停止调用doInBackground方法。我尝试了这里建议的解决方案,Android SDK AsyncTask doInBackground没有运行(子类),但我得到了相同的结果。onPreExecute方法被调用,但我只剩下加载对话框。有没有人经历过类似的事情。我已经附上了我的代码副本。MyAsncT

  • 问题内容: 我有以下不在活动内的asynctask类。在活动中,我正在初始化asynctask,并且希望asynctask将回调报告回我的活动。可能吗?还是asynctask必须与活动位于同一类文件中? 像这样吗 问题答案: 您可以创建一个,将其传递给(在构造函数中),然后在中调用 例如: 您的界面: 您的活动: 和您的AsyncTask: 编辑 由于此答案非常受欢迎,因此我想补充一些内容。 如果

  • 我是Firebase的新手,我有很多问题,因为所有的任务都是异步调用的。 谢谢!

  • 目标:在Kubernetes集群的InitContainer中运行DB迁移以更新DB。 预期结果:应该运行容器,将Prisma迁移打包到容器中。随后,Prisma migrate命令应运行并更新数据库, 当DB为空时,容器运行,调用migrate命令,我收到以下消息, 虽然这会在DB中创建\u迁移表,但不会应用任何迁移。如果我从本地机器连接到DB,我可以运行迁移脚本和所有更新。如果从容器中再次运行

  • Q1:这里的“disabled”是否被认为是一个属性 问题2: 是否所有html禁用按钮都有一个disabled属性,如: