当前位置:  编程技术>移动开发
本页文章导读:
    ▪兑现程序中的分享功能        实现程序中的分享功能 实现图中的分享功能,代码如下: Intent intent=new Intent(Intent.ACTION_SEND); intent.setType("image/*"); intent.putExtra(Intent.EXTRA_SUBJECT, "分享"); inte.........
    ▪ 过程(一) 1.7 Handler的源码解析        进程(一) 1.7 Handler的源码解析 这篇其实是体外的,对于想了解人,可以研究下,或者说助于理解handler吧。。。 先说下handler的三个构造函数开始我们的源码解析之旅吧。。。 (一)默认的.........
    ▪ TextWatcher兑现EditText与TextView同步       TextWatcher实现EditText与TextView同步TextWatcher自身是一个接口,首先需要实现这个接口并覆盖其三个方法,分别为Text改变之前,改变之后以及改变的过程中各自发生的动作相应,这里我们只需要.........

[1]兑现程序中的分享功能
    来源: 互联网  发布时间: 2014-02-18
实现程序中的分享功能

实现图中的分享功能,代码如下:




    
[2] 过程(一) 1.7 Handler的源码解析
    来源: 互联网  发布时间: 2014-02-18
进程(一) 1.7 Handler的源码解析


先说下handler的三个构造函数开始我们的源码解析之旅吧。。。

(一)默认的构造函数


其中, MessageQueue mQueue存放消息的消息队列,Looper mLooper消息循环,Callback mCallback回调;

看下代码 mLooper = Looper.myLooper(); 

这里我们看下Looper的源码:




而这里的static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();

发现在myLooper() 中得到的函数在prepare函数加入了消息循环的sThreadLocal.set(new Looper());

这里很好的说明了,我们在使用mylooper()的时候,需要先调用prepare()方法。

2. CallBack回调函数


这个构造函数与默认构造函数唯一不同的就是mCallback区别,那我们就分析CallBack这个接口吧!

这个其实就是在消息派发的时候,区分是在哪里处理消息的,如果Callback不为空,则消息就在他实现的这个借口的handleMessage()方法里处理。

3. 传入消息循环Looper


这个是传入消息循环,而不是系统默认生成,而是我们自己创建或者从已有的消息循环拿过来使用


4.消息循环和CallBack回调函数



(二)消息的发送

handler如何把消息放入消息队列中吗?runable中的run()是如何被调用的????

1. 发送消息


2. 延时发送消息


3. 定时发送消息


前面的1,,2,3三个函数,通过sendMessageAtTime来实现的,那么重点分析下他吧

MessageQueue queue = mQueue的消息队列是我们在创建消息循环Looper的时候创建的,这个可以看Handler的构造函数;

target是Handler类型的, 这样消息就可以把消息发送给各自的handler,这样就不会出现多个handler而消息换混乱的问题。。。。

他们的扩展函数:

1.


2.这里我们就可以看到,这里就吧what值付给类消息,再调用sendMessageDelayed函数发送消息,只是一个特殊情况而已。。。


3.


4.



5.


不难发现,3,4,5的函数中叶是同sendMessageAtTime来是实现,这里最重要的就是调用了getPostMessage()

这里其实也就把runbale赋值给了Message中Runnable callback(这里要注意,这个callback和handler中callback(ICallback)是不一样的)。


(三)从Handler中获取消息消息

还有四个同名的函数,他们的是实现都是通过Message.obtain()来实现的;



不难发现,消息是从消息 池中取出来的,如果消息池中没有消息,则才回去此新生成一个;

当然,message中obtain方法也是有很多同名函数的,这里就不举例了。。。。


(四)消息的派发


这里有三种情况来处理消息:

(1)message中callback(Runable)不为空,即通过post把runable对象置入消息中;

这里就调用了需要实现的runable对象中的run()函数;


(2)mCallback(ICallback)不为空

我们只要实现这个接口就可以了。。。这个方法,好像使用的很少,不知哪位大师,可否指教下,什么情况下使用。。。。

(3)(1)(2)都不满足的请款下,就调用了handleMesage函数


至此,我们已经分析了handler的生成,消息的发送以及消息的派发;


最后我们分析下消息循环Looper


1.构造函数

Looper的构造函数是私有的,在构造中生成了队列和获取当前的线程,

这里其实要注意的,发现前面文章中说的是有问题的,我们不难发现,如果我们在主线程中创建默认的handler,他其实创建获和取的消息循环的线程都是在主线程中,因为


而sThread的循环是new Looper实现的,而Lopper中就使用主线程。。。。所以我们前面说错了,这个线程虽然由系统产生,但是他也是主线程,所以以后操作最好使用ThreadHandler.


2.loop实现消息的死循环


这个函数式由系统调用的,所以我们才会说在主线程创建Hanler,不阻塞组线程,并且是异步的。。。。

这里最主要是派发消息和消息的回收。。。


以上就关于handler的源码解析,有问题,或者说错的请指教。。。。。。。




    
[3] TextWatcher兑现EditText与TextView同步
    来源: 互联网  发布时间: 2014-02-18
TextWatcher实现EditText与TextView同步

TextWatcher自身是一个接口,首先需要实现这个接口并覆盖其三个方法,分别为Text改变之前,改变之后以及改变的过程中各自发生的动作相应,这里我们只需要实现EditText在文本发生改变时候让TextView的内容跟着发生变化。




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3