您的位置:首页 > 移动开发 > Android开发

自己对Handler和HandlerThread的理解

2016-12-17 18:11 337 查看

共同点

都是用于多个线程间通信,通知其他线程某些任务已经处理完成。

区别

Handler主要是子线程通知Android的UI线程(主线程)更新界面。

HandlerThread主要是Android的UI线程(主线程)通知子线程中的handler去做异步任务。

示例场景

Handler的使用场景

网络请求完成后,通知UI线程刷新界面。

public class Main3Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);

new Thread(new Runnable() {
@Override
public void run() {
//网络请求中......
SystemClock.sleep(5000);
//网络操作完成,给主线程的handler发消息
handler.sendEmptyMessage(32);
}
}).start();
}

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 32) {
Log.i("success", "接收到消息");
//在这里处理ui刷新
}
}
};
}


HandlerThread的使用场景

主线程通知子线程做异步任务

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
btnSendMsg = (Button) findViewById(R.id.btn_send_messege);
btnSendMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击一次就给子线程中的handler发消息
handler.sendEmptyMessage(322);
}
});
HandlerThread thread = new HandlerThread("backThread");
thread.start();
handler = new BackHandler(thread.getLooper());
}

/**
* 这个handler是在子线程中创建的
*/
private class BackHandler extends Handler {
public BackHandler(Looper looper) {
super(looper);
}

@Override
public void handleMessage(Message msg) {

Log.i("msg", "当前线程是" + Thread.currentThread().getName() + "...接收到了主线程的消息");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息