Fre*_*uss 1 database android android-asynctask
是否有可能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]);
}
Run Code Online (Sandbox Code Playgroud)
我遇到的结果是什么
abbd
好.我深挖并找到了答案:消息之间的传输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);
}
Run Code Online (Sandbox Code Playgroud)
结果如下: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);
}
Run Code Online (Sandbox Code Playgroud)
这一次在正常情况下,结果必须是:1 2 3 4 5 6 7 8 9 10
这就是我们所期望的,不是吗?
如果有更好的想法,我想听到,
任何评论都会受到欢迎.
注意:可能过于简单的情况,但保存了我的一周.
| 归档时间: |
|
| 查看次数: |
1828 次 |
| 最近记录: |