2010-07-20 92 views
3

我在異步模式下使用Twitter4j。當我在聽衆中得到響應時,我希望能夠在我的活動中更改某些視圖,但結果爲CalledFromWrongThreadException如何優雅地從其他線程訪問Android視圖?

我知道我可以使用runOnUiThread方法,但除了內聯Runnable Classes之外,最優雅的解決方案是什麼?我的活動

部分:

TwitterListener listener = new TwitterAdapter() { 

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

      fillInUserProfileDetails(user); 

回答

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),並提醒自己,優雅是程序員的眼中的東西。