3

Twitter4j を非同期モードで使用しています。リスナーで応答を受け取ったら、アクティビティでいくつかのビューを変更できるようにしたいのですが、結果はCalledFromWrongThreadException.

メソッドを使用できることはわかっていますrunOnUiThreadが、Runnable Class をインライン化する以外に、これに対する最もエレガントなソリューションは何ですか?

私の活動の一部:

    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 に答える