gpt4 book ai didi

android - onProgressUpdate 遗漏了一些发布

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:56 25 4
gpt4 key购买 nike

是否有可能某些调用 publishProgress 被 onProgressUpdate 遗漏了?我的意思是,在使用 publishProgress 调用的情况下,doInBackground 和 onProgressUpdate 回调之间是否可能存在一次传输未命中。因为我看到了。

class DoSomething extends AsyncTask Void, String, Void {
String[] S = new String[] {"a", "b", "c", "d"};

void doInBackground(Void... ps) {

for(String s : S) {
publishProgress(s);
}
}

void onProgressUpdate(String... vs) {

Log.d("", vs[0]);
}

我遇到的结果

a b b d


c 发生了什么?
注意:这只是我的应用程序的示例,有时会发生这种情况(根本不会运行),我无法在这里编写所有代码,因为它太复杂了。但总而言之,这正在发生。
那么有什么想法吗?

最佳答案

好的。我深入挖掘并找到答案:doInBackgroundonProgressUpdate 之间的消息传输不是串行的,而是异步的(来自基类名称)。 doInBackground 中使用 publishProgress(xx) 的任何调用最终都会到达 onProgressUpdate 但不是一对一。
例如,非常虚拟的演示:

doInBackgroud() {
String s;
for(i=1 to 10) {
s = i.toString();
publishProgress(s);
}
}

onProgressUpdate(String par) {
Log.d(par);
}

结果可以是:1 2 2 3 4 5 5 5 6 7
什么?别担心,我们通过引用发送局部变量 s(在 doinback.),并且在 onProgressUpdate 被调用并且它正在记录它的值时,doInBackground 可能正在改变s 的值。这会在 onProgressUpdate 中产生意想不到的值。但是所有 publishProgress 调用都会调用 onProgressUpdate 方法。
如果我们写:

doInBackgroud() {

for(i=1 to 10) {
String s = i.toString();
publishProgress(s);
}
}

onProgressUpdate(String par) {
Log.d(par);
}

这次在正常情况下,结果一定是:1 2 3 4 5 6 7 8 9 10
这就是我们所期望的,不是吗?
如果有更好的主意,我想听听
任何评论都将受到欢迎。
注意:也许情况太简单了,但节省了我一周的时间。

关于android - onProgressUpdate 遗漏了一些发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967087/

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