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

Android-AsyncTask,是否发布了所有progressPublish调用?,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,官方: onProgressUpdate(Progress…),在调用后在UI线程上调用 发表进展(进展…)。执行的时间不确定 未定义。此方法用于显示项目中任何形式的进度 后台计算仍在执行时的用户界面。 例如,它可以用于设置进度条的动画或在中显示日志 文本字段 它还说,时间是不确定的,而不是那些东西实际上得到公布 我认为有理由只发布提交的最新进度,而且对所有人都是如此 假设有一个巨大的缺乏峰值和100个进度更新已经发布,为什么不放弃旧的99-如果它是为进度条等,或显示什么是目前正在加载,为什么

官方:

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

它还说,时间是不确定的,而不是那些东西实际上得到公布

我认为有理由只发布提交的最新进度,而且对所有人都是如此

假设有一个巨大的缺乏峰值和100个进度更新已经发布,为什么不放弃旧的99-如果它是为进度条等,或显示什么是目前正在加载,为什么不费事通过轻弹

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

异步任务是否按照接收到的顺序发布所有进度更新(以及在运行执行后工作之前)

无法测试该行为,因为它不是确定性的,我可能很幸运,或者我的设备可能很快,这就是我问的原因。您永远不应该测试(并从中推断属性)与线程有关的任何内容(如果这节省了一个新手,那么值得一写)

好吧。这里的相关部分似乎确实表明,每次调用
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();
        }
    }
/**
*这个方法可以从{@link#doInBackground}调用到
*在后台计算运行时在UI线程上发布更新
*还在跑。对此方法的每次调用都将触发
*UI线程上的{@link#onProgressUpdate}。
*
*如果任务已完成,则将调用{@link#onProgressUpdate}
*取消了。
*
*@param值用于更新UI的进度值。
*
*@see#onProgressUpdate
*@see#doin background
*/
受保护的最终作废发布进度(进度…值){
如果(!isCancelled()){
sHandler.ActainMessage(消息发布进度,
新的AsyncTaskResult(this,values)).sendToTarget();
}
}