android中的操作顺序,为什么会如此?

时间:2014-12-23 14:43:10

标签: java android multithreading

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

程序必须在没有线程的主线程上运行

是的,当然我知道我不应该在主线程中这样做,我问,因为我很好奇为什么会出现这种奇怪的情况,我想更好地理解将来避免这种情况

2 个答案:

答案 0 :(得分:2)

  

程序必须在没有线程的主线程上运行

那就是问题所在。您正在UI线程上执行昂贵的操作(getFromLocation)。基本上不要这样做。您正在停止更新UI,因为UI线程正在忙于调用getFromLocation

应该使用另一个线程进行此操作 - 在适当的位置编组回UI线程以更新UI。

答案 1 :(得分:0)

您的UI线程在此行被阻止:

geocoder.getFromLocation

您应该在不同的线程上执行它(考虑使用处理程序执行它。)