3

我在异步模式下使用 Twitter4j。当我在侦听器中获得响应时,我希望能够更改我的活动中的一些视图,但它会导致CalledFromWrongThreadException.

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

我的部分活动:

    TwitterListener listener = new TwitterAdapter() {

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

            fillInUserProfileDetails(user); 
4

1 回答 1

3

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

编辑: http ://android-developers.blogspot.com/2009/05/painless-threading.html

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

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

于 2011-03-14T21:12:39.940 回答