作者lui (i want to be one)
看板AndroidDev
标题Re: [问题] ListView非同步更新的实作
时间Tue Jan 25 21:50:30 2011
※ 引述《quare96 (光怪鹿离)》之铭言:
: 开发层: 应用
: 问题:
: 问题的起头只是因为我刚开始写了一个需要接API并用ListView输出的小程式,
: 可是随後我发现只要行动网路不够稳的时候连接API会让整个程式画面在输出
: 前暂时卡住。
: 於是稍微检视一下,问题主要出现在我把查询动作写在onCreate中,
: 这麽一来就代表了他会等到查询动作结束後才会输出画面,
: 我稍微参考了一下官网的LifeCycle,提到Activity在走到onStart时代表了
: 画面已经输出,於是我把查询动作移进了onStart....
: 不过结果是一样的,查询动作还是跑在画面输出前
: 接着我在逛了一下官方的开发者论坛,有人提到了因为Activity从onCreate到
: onDestroy基本上是同一个执行绪在处理,所以无论怎麽移原则上都没办法改变
: 这个结果,建议分裂出一个执行绪同步去处理
: so,我就乖乖的照着做了,New了一个Thread去处理,把查询写在run里面之後
: (Thread.start()摆在onCreate中)
: 开断点debug下去看,顺序是有达到我的要求..
: 不过问题来了,查询完要将结果写入ListView时它竟然跳出Exception!!!
: 我看了一下错误讯息...是一串英文(废话) 大意是说不能用多出来的执行绪去
: 操作原本Layout上的物件
: 看到差点没翻桌了...有人能给点建议吗?
: 参考: 官网文件及论坛
: 补充说明: 其实用BuittonClick去触发更新ListView也不是不行啦...但就是有种
: 输掉的感觉XD
文件有说
不能用非ui thread去改ui
你应该在你的query thread里执行
runOnUiThread(new Runnable() {
public void run() {
// modify ListView object
}
});
这就不会有Exception了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.87.144
1F:推 quare96:感谢建议^^ 我试试看 01/26 09:41