Android开发之handler(四)
2015-06-22 11:36
405 查看
在handler(三)中点击打开链接,我们知道普通的handler类是没有实现多线程的,在android中的handler要实现多线程,可以使用HandlerThread这个类,如下所示
[java] view
plaincopy
package com.handlerThread;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
public class handlerThread2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("activity线程ID:"+Thread.currentThread().getId());
HandlerThread handlerThread = new HandlerThread("handlerThread");
handlerThread.start();
MyHandler handler = new MyHandler(handlerThread.getLooper());
Message msg = handler.obtainMessage();
msg.sendToTarget();
}
class MyHandler extends Handler {
public MyHandler() {
super();
// TODO Auto-generated constructor stub
}
public MyHandler(Looper looper) {
super(looper);
// TODO Auto-generated constructor stub
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("handler线程ID:"+Thread.currentThread().getId());
}
}
}
运行结果:
![](http://img.my.csdn.net/uploads/201211/17/1353162421_6623.png)
由此才可以说handler实现了真正意义上的多线程。
在上面的程序中我们看到有个新知识looper,那么什么是looper呢,如下是官方的解释
![](http://img.my.csdn.net/uploads/201211/18/1353207182_3424.png)
大概的意思就是说,looper是用来循环获取消息的,那么整个流程就可以看作是handler往消息队列中添加消息,looper再循环获取这些消息。
[java] view
plaincopy
package com.handlerThread;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
public class handlerThread2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
System.out.println("activity线程ID:"+Thread.currentThread().getId());
HandlerThread handlerThread = new HandlerThread("handlerThread");
handlerThread.start();
MyHandler handler = new MyHandler(handlerThread.getLooper());
Message msg = handler.obtainMessage();
msg.sendToTarget();
}
class MyHandler extends Handler {
public MyHandler() {
super();
// TODO Auto-generated constructor stub
}
public MyHandler(Looper looper) {
super(looper);
// TODO Auto-generated constructor stub
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
System.out.println("handler线程ID:"+Thread.currentThread().getId());
}
}
}
运行结果:
![](http://img.my.csdn.net/uploads/201211/17/1353162421_6623.png)
由此才可以说handler实现了真正意义上的多线程。
在上面的程序中我们看到有个新知识looper,那么什么是looper呢,如下是官方的解释
![](http://img.my.csdn.net/uploads/201211/18/1353207182_3424.png)
大概的意思就是说,looper是用来循环获取消息的,那么整个流程就可以看作是handler往消息队列中添加消息,looper再循环获取这些消息。
相关文章推荐
- Android:Json解析库的选择
- Android开发之handler(三)handler真的是重新启动一个线程吗?
- android下屏幕适配
- Android开发之handler(二)
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- Android中自定义属性(attrs.xml,TypedArray的使用)
- Android Studio Gradle 添加.so 支持文件
- android imageloader
- Android开发之handler(0)
- android百度地图 SDK v3.5.0
- Android系统框架学习总结
- Android Bitmap与String互转
- Android图像处理之Bitmap类
- Androidclient和server第一种方法端数据交换
- android的activity总结
- 深入理解Android的startservice和bindservice
- android用pull解析xml文件
- Android中的消息处理实例与分析