线程调度(Java Android)
在Android中,线程的调度通常是通过Handler
和Looper
来实现的,因为Android的UI操作不是线程安全的,所以更新UI只能在主线程(UI线程)中进行。
以下是一个简单的例子,展示了如何在Android中使用Handler来在子线程完成任务后更新UI:
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Handler mainHandler = new Handler(Looper.getMainLooper());
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 在点击按钮时开始一个新线程
new Thread(new Runnable() {
@Override
public void run() {
// 模拟耗时任务
long result = doSomeLongRunningTask();
// 使用Handler切换到主线程更新UI
mainHandler.post(new Runnable() {
@Override
public void run() {
textView.setText("任务完成,结果是:" + result);
}
});
}
}).start();
}
});
}
private long doSomeLongRunningTask() {
// 这里模拟耗时任务,比如网络请求或计算
try {
Thread.sleep(2000); // 模拟耗时2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
return System.currentTimeMillis(); // 返回一个时间戳作为"任务结果"
}
}
在这个例子中,当按钮被点击时,开始一个新线程来执行耗时任务。耗时任务完成后,通过mainHandler.post()
方法将UI更新的操作切换到主线程执行。这样可以确保UI的更新在主线程中进行,避免了线程安全问题。
评论已关闭