一般情况下,我们启动一个线程,是让它完成一件任务,完成该任务后,线程就退出了。还有一种情况,我们希望该线程一直在运行,我们会时不时的向该线程发送一些消息,线程接收到该消息后,执行相应的操作,执行完成后,线程不退出,等待下一个消息,这很像所谓的“事件触发”。在Android上,使用Looper和Handler很容易实现该功能。
故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();
跳出消息循环使用:Looper.myLooper().quit();
故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();
- public class LoopThread extends Thread {
- public interface HandlerCreater {
- Handler createHandler();
- }
- private Handler mHandler = null;
- private HandlerCreater mHandlerCreater;
- LoopThread(HandlerCreater hc) {
- mHandlerCreater = hc;
- }
- @Overwrite
- public void run() {
- Looper.prepare();
- mHandler = mHandlerCreater.createHandler();
- Looper.loop();
- mHandler = null;
- }
- public void sendMessage(Message msg) {
- if (null != mHandler) {
- mHandler.sendMessage(msg);
- }
- }
- }
public class LoopThread extends Thread { public interface HandlerCreater { Handler createHandler(); } private Handler mHandler = null; private HandlerCreater mHandlerCreater; LoopThread(HandlerCreater hc) { mHandlerCreater = hc; } @Overwrite public void run() { Looper.prepare(); mHandler = mHandlerCreater.createHandler(); Looper.loop(); mHandler = null; } public void sendMessage(Message msg) { if (null != mHandler) { mHandler.sendMessage(msg); } } }这样,在主线程中只要实现一个HandleCreater,创建出自己合适的Handler,然后就可以启动线程,并向其发消息了。
跳出消息循环使用:Looper.myLooper().quit();
一般情况下,我们启动一个线程,是让它完成一件任务,完成该任务后,线程就退出了。还有一种情况,我们希望该线程一直在运行,我们会时不时的向该线程发送一些消息,线程接收到该消息后,执行相应的操作,执行完成后,线程不退出,等待下一个消息,这很像所谓的“事件触发”。在Android上,使用Looper和Handler很容易实现该功能。
故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();
跳出消息循环使用:Looper.myLooper().quit();
故名思意,Looper就是一个消息循环,而Handler就是一个消息处理器,在非UI线程中,线程默认是不存在消息循环的,因此在创建Handler的时候会抛出异常,在创建Handler对象之前,必须调用Looper.prepare(),然后创建Handler对象,最后启动消息循环:Looper.loop();
- public class LoopThread extends Thread {
- public interface HandlerCreater {
- Handler createHandler();
- }
- private Handler mHandler = null;
- private HandlerCreater mHandlerCreater;
- LoopThread(HandlerCreater hc) {
- mHandlerCreater = hc;
- }
- @Overwrite
- public void run() {
- Looper.prepare();
- mHandler = mHandlerCreater.createHandler();
- Looper.loop();
- mHandler = null;
- }
- public void sendMessage(Message msg) {
- if (null != mHandler) {
- mHandler.sendMessage(msg);
- }
- }
- }
public class LoopThread extends Thread { public interface HandlerCreater { Handler createHandler(); } private Handler mHandler = null; private HandlerCreater mHandlerCreater; LoopThread(HandlerCreater hc) { mHandlerCreater = hc; } @Overwrite public void run() { Looper.prepare(); mHandler = mHandlerCreater.createHandler(); Looper.loop(); mHandler = null; } public void sendMessage(Message msg) { if (null != mHandler) { mHandler.sendMessage(msg); } } }这样,在主线程中只要实现一个HandleCreater,创建出自己合适的Handler,然后就可以启动线程,并向其发消息了。
跳出消息循环使用:Looper.myLooper().quit();