首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android Looper跟Handler分析(转载)

2012-09-14 
Android Looper和Handler分析(转载)?第一次接触android应用程序(这里指的是JAVA层的UI程序,也难怪了,Googl

Android Looper和Handler分析(转载)

?第一次接触android应用程序(这里指的是JAVA层的UI程序,也难怪了,Google放出的API就只支持JAVA应用程序了),很难搞明白内部是如何实现的。但是,从原理上分析,应该是有一个消息循环,一个消息队列,然后主线程不断得从消息队列中取得消息并处理之。

然而,google封装得太厉害了,所以一时半会还是搞不清楚到底是怎么做的。本文将分析android内的looper,这个是用来封装消息循环和消息队列的一个类,handler其实可以看做是一个工具类,用来向消息队列中插入消息的。好比是Windows API的SendMessage中的HANDLE,这个handle是窗口句柄。?

?

那怎么往这个消息队列中发送消息呢??调用looper的static函数myQueue可以获得消息队列,这样你就可用自己往里边插入消息了。不过这种方法比较麻烦,这个时候handler类就发挥作用了。先来看看handler的代码,就明白了。?

?

?讲了这么多,该怎么创建和使用一个带消息循环的线程呢?

?

//假设在onCreate中创建一个线程//不花时间考虑代码的完整和严谨性了,以讲述原理为主。....... onCreate(...){//难点是如何把android中的looper和java的thread弄到一起去。//而且还要把随时取得这个looper用来创建handler//最简单的办法就是从Thread派生一个class ThreadWithMessageHandle extends Thread{ //重载run函数 Looper myLooper = null; run(){ Looper.prepare();//将Looper设置到这个线程中 myLooper = Looper.myLooper(); Looper.loop();开启消息循环} ThreadWithMessageHandle threadWithMgs = new ThreadWithMessageHandle(); threadWithMsg.start(); Looper looper = threadWithMsg.myLooper;////这里有个问题.threadWithMgs中的myLooper可能此时为空//需要同步处理一下//或者像API文档中的那样,把handler定义到ThreadWithMessageHandle到去。//外线程获得这个handler的时候仍然要注意同步的问题,因为handler的创建是在run中的 Handler threadHandler = new Handler(looper); threadHandler.sendMessage(...)}}...

?

好了,handler和looper的分析就都这了,其实原理挺简单的。

?

原文:http://blog.csdn.net/innost/article/details/6055793

热点排行