Android FATAL EXCEPTION:Thread-101エラー問題

2338 ワード

最近、小さなエラーが発生しましたが、よく注意しない可能性があります.ほとんどの場合、サブスレッドで時間のかかる操作を行い、メインスレッドでUIを更新していることを知っています.そのため、サブスレッドが時間をかけて操作するものがたくさんあります(くだらないことを言いました).私が直面した問題についてお話しします.
  new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String numgo = EDITGO.getText().toString().trim();
                        Log.w("Main", "num" + numgo);
                        if (numgo.equals("")) {
                           

                            Toast.makeText(contextPub, "    ", Toast.LENGTH_SHORT).show();


                        } else {
                            String sOut = ComS2.ES_LotteryGoOut(Integer.valueOf(numgo));
                            DuihuakuangShow(sOut);
                        }
                    }
                }).start();

上の問題は間違っていないようで、上のコードの意味は簡単で、私はサブスレッドを開いて、それから入力ボックスの値を手に入れて、空ではない判断を行って、それからToastはヒントを与えて、空のために私の一連の口の時間の操作を実行しません.全体的には大丈夫ですね.鉄さん、初級プログラマーさん.......
私たちはサブスレッドにいるので、UIメインスレッドを実行できません.のtoastはメインスレッドに表示されているもの....だから……、
解決策の使用
runOnUiThread(new Runnable() {
    @Override
    public void run() {

ここではToaseを使います
   }
});

runOnUI Threadこれを見ると名前だけでrun(これ)on(戻る)UI(ui)Thread(スレッド)がメインスレッドUIスレッドに戻って動作することが理解できますが、ははは、私はこのように理解しています.正しいコードです.
   new Thread(new Runnable() {
                @Override
                public void run() {
                    String numgo = EDITGO.getText().toString().trim();
                    Log.w("Main","num"+numgo);
                    if(numgo.equals("")){
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(contextPub,"    ",Toast.LENGTH_SHORT).show();
                            }
                        });
                    }else {
                        String sOut = ComS2.ES_LotteryGoOut(Integer.valueOf(numgo));
                        DuihuakuangShow(sOut);
                    }
                }
            }).start();

RunonUIthreadは、Handlerの実行を開始することもできます.
実は問題を大きな白話で言えば、サブスレッドは時間のかかる操作を実行し、メインスレッドはリフレッシュUIを実行する.そのツールを使ってメインスレッドに戻ってUIリフレッシュを実行すればいいです.