1.使用Handler消息传递机制
public class MainActivity extends Activity {
private ActivityMainBinding mainBinding;
Handler handler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg) {
if(msg.what==111){
mainBinding.ivText1.setText("更新后的ui");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mainBinding.getRoot());
new MyThread().start();
}
private class MyThread extends Thread{
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(111);
}
}
}
- 使用AsyncTask异步任务
public class MainActivity extends Activity {
private ActivityMainBinding mainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mainBinding.getRoot());
new Yibu().execute();
}
private class Yibu extends AsyncTask<String,String,String> {
@Override
protected String doInBackground(String... strings) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
mainBinding.ivText1.setText("更新后的ui");
}
}
}
- 使用runOnUiThread(action)方法
public class MainActivity extends Activity {
private ActivityMainBinding mainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mainBinding.getRoot());
new MyThread().start();
}
private class MyThread extends Thread {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mainBinding.ivText1.setText("更新后的TextView");
}
});
}
}
}
-
使用Handler的post(Runnabel r)方法
-
`
public class MainActivity extends Activity {private ActivityMainBinding mainBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mainBinding.getRoot());
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
mainBinding.ivText1.setText(“更新后的TextView”);
}
});
}
}`