我对执行方法的顺序有一个奇怪的问题。
仅在操作.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。

09-27 14:55