3.18
安卓中的多线程与异步任务处理
为了保证安卓应用的流畅性和响应性,处理耗时任务时需要使用多线程和异步处理机制。常见的方式有使用 Thread 类、Handler、AsyncTask 以及更现代的 Kotlin 协程和 Java 的 Executor 框架。
使用 Thread 类创建一个简单的子线程:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// 耗时操作,例如网络请求或文件读取
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 在子线程中不能直接更新UI,需要通过Handler传递消息
}
});
thread.start();
结合 Handler 来更新 UI:
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
if (msg.what == 1) {
TextView textView = findViewById(R.id.text_view);
textView.setText("UI updated from thread!");
}
}
};
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
Message message = Message.obtain();
message.what = 1;
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
AsyncTask 是安卓封装的异步任务类,它简化了子线程与主线程之间的交互:
class MyAsyncTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
try {
Thread.sleep(3000);
return "Task completed";
} catch (InterruptedException e) {
e.printStackTrace();
return "Error";
}
}
@Override
protected void onPostExecute(String result) {
TextView textView = findViewById(R.id.text_view);
textView.setText(result);
}
}
new MyAsyncTask().execute();
而 Kotlin 协程则提供了更简洁、更强大的异步编程方式,通过launch和suspend函数可以轻松处理异步任务,后续博客将深入介绍协程的高级用法。
浙公网安备 33010602011771号