如何从其他线程优雅地访问Android视图?

时间:2010-07-20 10:36:48

标签: android multithreading asynchronous twitter4j

我在异步模式下使用Twitter4j。当我在Listener中获得响应时,我希望能够在我的Activity中更改一些视图,但这会导致CalledFromWrongThreadException

我知道我可以使用runOnUiThread方法,但除了内联Runnable类之外,最优雅的解决方案是什么?

我的部分活动:

    TwitterListener listener = new TwitterAdapter() {

        @Override
        public void gotUserDetail(User user) {
            super.gotUserDetail(user);

            fillInUserProfileDetails(user); 

1 个答案:

答案 0 :(得分:3)

我认为没有比Activity.runOnUiThread(Runnable)View.post(Runnable)更优雅的解决方案了。您可能已经在Android文档中看到了线程的讨论:

修改 http://android-developers.blogspot.com/2009/05/painless-threading.html

如上所述,Android UI工具包不是线程安全的,因此与它的所有交互必须发生在同一个线程上,即应用程序的UI线程;如果您要将工作从一个线程传递到另一个线程,则需要一个Runnable对象来封装要执行的工作。

我知道匿名内部类看起来很混乱,但它们在Java中是一个很常见的习惯用法,因为它们是语言中最接近closures的内容。所以,对你来说最好的事情,IMO,是咬紧牙关并使用Activity.runOnUiThread(Runnable),并提醒自己优雅是程序员的眼睛。