由于android ui线程不能被阻塞,所以不能再主线程中进行一些比较耗时的操作。这时候,如果需要进行一些比较耗时的操作,如果会阻塞ui线程,可使用写一个子线程进行耗时操作。由于子线程中不能进行对ui的更新,所以使用handler当子线程操作完成之后发送消息通知主线程更新ui。
使用实例:
首先设置一个静态常量用来控制msg.what
private static final int
COMPLETED=0X100;
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- //通过handler通知主线程更新ui
- if (msg.what == COMPLETED) {
- stateText.setText("completed");
- }
- }
- };
- //工作线程
- private class WorkThread extends Thread {
- @Override
- public void run() {
- //......处理比较耗时的操作
- //处理完成后给handler发送消息
- Message msg = new Message();
- msg.what = COMPLETED;
- handler.sendMessage(msg);
- }
- }
线程的启动,这里由button点击之后启动线程。
- @Override
- public void onClick(View v) {
- new WorkThread().start();
- }