1.AsyncTask(短时间得后台操作)
class FetchDataTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
// 在这里执行耗时操作,比如网络请求或数据库查询
return fetchData();
}
@Override
protected void onPostExecute(String result) {
// 在主线程更新UI
textView.setText(result);
}
}
// 启动任务
new FetchDataTask().execute();
2.Handle
2.1.发送Runnable
final Handler handler = new Handler(Looper.getMainLooper());
new Thread(new Runnable() {
@Override
public void run() {
final String data = fetchData(); // 在这里执行后台线程的数据获取操作
handler.post(new Runnable() {
@Override
public void run() {
// 在这里更新UI,因为handler.post确保了在主线程执行
textView.setText(data);
}
});
}
}).start();
class ProgressThread extends Thread {
@Override
public void run() {
super.run();
runOnUiThread(new Runnable() {
@Override
public void run() {
//更新ui
}
});
}
}
}
2.2.发送消息
// 初始化Handler
mainHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
Bundle data = msg.getData();
String message = data.getString("message");
}
}
};
new Thread(new Runnable() {
@Override
public void run() {
// 模拟后台操作,获取数据
String newData = getData();
// 发送消息到主线程更新UI
Message msg = new Message();
msg.what = 1;
Bundle bundle = new Bundle();
//携带数据
bundle.putString("message", newData);
msg.setData(bundle);
mainHandler.sendMessage(msg);
}
}).start();
}
2.3.延时发送Runnable
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
}
}, 100);