单独的线程更新UI中的长时间运行过程

时间:2011-07-20 05:43:07

标签: android long-running-processes

我注意到dot NET存在类似的问题,但我的问题是针对Android,所以解决方案看起来可能不同。

单击按钮激活该过程。该过程作为UI线程的一部分运行,最后它确实更新了UI。我添加了进度对话框以提高用户友好性,因此我实例化了一个运行该进程的线程,最后它更新了UI并解除了进度对话框。不幸的是,UI更新失败,例外情况如下:

07-19 21:14:04.602: ERROR/Atjeews(283): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

如果我尝试阻止UI线程并在长时间处理完成更新UI后释放它,则不会显示进度对话框。我应该尝试在单独的线程中显示进度对话框,还是有另一种更简单的解决方案?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

取自Android开发者Processes and Threads页面:

  

要解决此问题,Android提供了几种从其他线程访问UI线程的方法。以下列出了可以提供帮助的方法:

     

Activity.runOnUiThread(可运行)
  View.post(Runnable接口)
  View.postDelayed(Runnable,long)

您可以将匿名Runnable实例化为参数,例如post(new Runnable(){doWhatever();}),它将在UI线程上执行您想要的任何操作。