android点滴(26)之让线程拥有自己的消息循环
我们都知道android中更新界面的时候要在主线程中跟新,所以我们通常在线程中更新或者获取数据,但是使用Handler 来更新数据。
这里使用的就是android的消息机制。相关的类有Looper,Message,MessageQueue,Handler。Looper是一个消息循环。UI线程默认
情况下就有一个消息循环,但是我们自己的线程没有,我们的线程默认的是使用UI线程的Looper。
我们的线程会有多种用途,有的是要更新UI的,有的是与UI不相干的,与UI相关的可以理所当然的使用UI线程的Looper,但是如果与
UI线程不相干呢?你也用?好意思吗?这时候我们可以为自己的线程添加Looper。
为自己的线程添加线程有两种方法,其实这两种方法本质上是没有区别的。1.在自己的线程中使用Looper.prepare()以及Looper.loop()。
2.使用sdk中的HandlerThread类,只要实例化HandlerThread对象,并且设置一个Handler就好了。
第一种方法--自己动手的示例如下
1 private class MyThread extends Thread{
2
3publicHandlermHandler=null;
4
5@Override
6publicvoidrun(){
7Looper.prepare();
8
9System.out.println("Thread中name="+Thread.currentThread().getName());
10
11mHandler=newHandler(){
12
13@Override
14publicvoidhandleMessage(Messagemsg){
15System.out.println("handler中name="+Thread.currentThread().getName());
16
17super.handleMessage(msg);
18}
19};
20
21Looper.loop();
22
23}
24
25}
第二种方法--使用HandlerThread的方法如下
定义一个HandlerThread对象,并且设置Handler
1 mThread.start();2mHandlerThread.start();
3mHandler=newMyHandler(mHandlerThread.getLooper());
1
2privateclassMyHandlerextendsHandler{
3
4publicMyHandler(Looperlooper){
5super(looper);
6}
7
8@Override
9publicvoidhandleMessage(Messagemsg){
10
11System.out.println(Thread.currentThread().getName());
12
13super.handleMessage(msg);
14}
15}
详细的示例见附件
android线程Looper
更多相关文章
- Android4.0 无线网络代码分析
- Android本地广播动作
- Android(安卓)进程和线程(二)
- Android中的线程和线程池
- Android中线程通讯类Handler
- Android(安卓)Handler那些事儿(二)——几个关键类之间的关系
- Android事件处理之使用异步任务执行下载
- android使用handlerthread创建线程示例
- 【Android(安卓)Linux内存及性能优化】(五) 进程内存的优化 - 线