第一种场景:
在UI线程中更新UI,这种是最简单的,直接更新UI即可。
代码如下
public class MainActivity extends AppCompatActivity{
private Button bt_click_me;
private TextView tv_text;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_click_me = findViewById(R.id.bt_click_me);
tv_text = findViewById(R.id.tv_text);
bt_click_me.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
tv_text.setText('111111111111111');
}
});
}
}
第二种场景:
从子线程中更新UI
代码如下
public class MainActivity extends AppCompatActivity{
private Button bt_click_me;
private TextView tv_text;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_click_me = findViewById(R.id.bt_click_me);
tv_text = findViewById(R.id.tv_text);
bt_click_me.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Thread thread = new Thread(new Runnable() {
@Override
public void run(){
tv_text.setText('111111111111111');
}
});
thread.start();
}
});
}
}
当点击按钮更新UI的时候就会发现报了异常,异常如下
图片.png
这个异常证明了子线程不能直接更新UI,解决方案如下
(1)通过Activity中的runOnUIThread方法
public class MainActivity extends AppCompatActivity{
private Button bt_click_me;
private TextView tv_text;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_click_me = findViewById(R.id.bt_click_me);
tv_text = findViewById(R.id.tv_text);
bt_click_me.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Thread