我对执行方法的顺序有一个奇怪的问题。
仅在操作.setVisibility(View.VISIBLE)
结束后才会出现进度条geocoder.getFromLocation
。
总结:
首先是60秒geocoder.getFromLocation
下载后,我看到progressWheel.setVisibility
我的期望:
首先,我想查看进度,稍后开始进行耗时的操作
void doSomethingTimeConsuming()
{
progressWheel.setVisibility(View.VISIBLE);
for(int i=0;i<100;++i)
{
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
progressWheel.setProgress(i);
{
}
程序必须在没有线程的主线程上运行
是的,我当然知道我不应该在主线程中这样做,因为我很好奇为什么会出现这种奇怪的情况,我想更好地理解以避免将来出现这种情况。
最佳答案
程序必须在没有线程的主线程上运行
嗯,这就是问题所在。您正在UI线程上执行昂贵的操作(getFromLocation
)。基本上不要这样做。您正在阻止更新UI,因为UI线程正忙于调用getFromLocation
。
您应该使用另一个线程来执行此操作-适当地编组回UI线程以更新UI。