1. 程式人生 > 其它 >在子執行緒中更新UI元件

在子執行緒中更新UI元件

android UI 介面更新

UI執行緒屬於主執行緒,當涉及到需要更新UI元件的問題時,需要在主執行緒中更新,另起執行緒會出現執行緒崩潰,當子執行緒需要修改主執行緒的UI元件時,需要通過傳送訊息來進行處理,方法如下

  1. 子執行緒直接修改UI元件,出現報錯:

    Activity --> onCreate(){
     tv_info = findViewById(R.id.tv_info);
       onClick(){
           findViewById(R.id.btn_change_str).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    tv_info.setText("hello android!");//子執行緒直接修改UI執行緒(主執行緒)
                }
            }).start();
        }
    });
    }
    }
  2. 解決辦法:

    主執行緒中建立訊息處理物件,子執行緒傳送message,給主執行緒的Handler處理

    Activity:
    private TextView tv_info;
       private Handler handler = new Handler(){
               @Override
               public void handleMessage(@NonNull Message msg) {
                   super.handleMessage(msg);
                   if (msg.what == 1) {
                   tv_info.setText("hello android !");
                      }
                  }
              };
       -->onCreate(){
       new Thread(new Runnable() {
       @Override
       public void run() {
           tv_info = findViewById(R.id.tv_info);
           handler.sendEmptyMessageDelayed(1, 3000);//子執行緒傳送空訊息給主執行緒,主執行緒handler接收到訊息並處理
        }
      }).start();
    }
    //最終效果:點選按鈕修改text成功