是否有可能onProgressUpdate错过了一些调用publishProgress?我的意思是使用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
发生了什么? 注意:这只是我的应用程序的说明,有时会发生这种情况(根本不会运行),我无法在这里编写所有代码,因为它太复杂了。但总的来说,这种情况正在发生。
答案 0 :(得分:6)
确定。我深挖并找到答案:doInBackground
和onProgressUpdate
之间的消息传输不是异步的串行(来自基类名称)。 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
什么?
不要担心,我们通过引用和调用的时间onProgressUpdate
发送局部变量s(在doinback。中)并记录其值,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
这就是我们的期望,不是吗?
如果有更好的想法,我想听听
任何评论都会受到欢迎
注意:可能过于简单,但保存了我的一周。