我注意到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后释放它,则不会显示进度对话框。我应该尝试在单独的线程中显示进度对话框,还是有另一种更简单的解决方案?
答案 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线程上执行您想要的任何操作。