我对执行方法的顺序有一个奇怪的问题。
仅在操作.setVisibility(View.VISIBLE)
结束后才会显示进度条geocoder.getFromLocation
。
总结:
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);
{
}
程序必须在没有线程的主线程上运行
是的,当然我知道我不应该在主线程中这样做,我问,因为我很好奇为什么会出现这种奇怪的情况,我想更好地理解将来避免这种情况
答案 0 :(得分:2)
程序必须在没有线程的主线程上运行
那就是问题所在。您正在UI线程上执行昂贵的操作(getFromLocation
)。基本上不要这样做。您正在停止更新UI,因为UI线程正在忙于调用getFromLocation
。
你 应该使用另一个线程进行此操作 - 在适当的位置编组回UI线程以更新UI。
答案 1 :(得分:0)
您的UI线程在此行被阻止:
geocoder.getFromLocation
您应该在不同的线程上执行它(考虑使用处理程序执行它。)