Toastがサブスレッドに問題を表示

1132 ワード

このコードは、グローバル例外のスナップを参照してください.
//  Toast       
    new Thread() {
        @Override
        public void run() {
            Looper.prepare(); 
            Toast.makeText(mContext, "   ~~~", Toast.LENGTH_LONG).show();
            Looper.loop(); 
        }
    }.start();

では問題が来ました.なぜLooperを加えたのですか.prepare(); Looper.loop(); トーストを弾けますか?UI以外のスレッドはUIを更新できないということではないでしょうか.Toast show()は本当にUIを更新しますか?
答えを見つけるにはToastソースコードを探さなければなりません.ソースコードからToast内部の実装がHandlerを使用していることを知っています.HandlerはLooperに依存して作成します(ソースコードを見て、looperが欠けている場合はエラーを報告します).
mLooper = Looper.myLooper();
    if (mLooper == null) {
        throw new RuntimeException(
            "Can't create handler inside thread that has not called Looper.prepare()");
    }
}

1番目の問題を解決し、2番目の問題を参照http://blog.csdn.net/aigestudio/article/details/43449123
3番目の質問
ToastはメインスレッドHandlerかどうかにかかわらず、トーストはwindowを操作し、checkThread投げメインスレッドに属さずUI異常を更新できない管理範疇である.ハンドラーを使っているのは、キューと時間でキュー表示トーストを制御するためだけです.
Androidでは、サブスレッドでToastを使用するとエラーが表示されますか?回答者:森绌http://zhihu.com/question/51099935/answer/125487934