Android主线程中不能进行耗时操作,然而在子线程中做完耗时操作则无法更新UI。于是便有了handler ,作为线程之前的通信。
handler的流程分为4个对象,handler ,Message,MessageQueue,Looper。
当应用创建的时候在主线程中创建handler对象,通过要发送的消息保存到Message中,handler通过sendMessage发送到MessageQueue中,Looper对象就会不断的调用loop()方法,不断的从MessageQueue中去除Message交给handler来处理,从而实现线程之间的通信。
一、Handler 引起的内存泄漏。
解决:将Handler声明为静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关,如果Handler里面需要context的话,可以通过弱引用方式引用外部类
Binder机制原理
在Android系统的Binder机制中,是有Client,Service,ServiceManager,Binder驱动程序组成的,其中Client,service,Service Manager运行在用户空间,Binder驱动程序是运行在内核空间的。而Binder就是把这4种组件粘合在一块的粘合剂,其中核心的组件就是Binder驱动程序,Service Manager提供辅助管理的功能,而Client和Service正是在Binder驱动程序和Service Manager提供的基础设施上实现C/S 之间的通信。其中Binder驱动程序提供设备文件/dev/binder与用户控件进行交互,Client、Service,Service Manager通过open和ioctl文件操作相应的方法与Binder驱动程序进行通信。而Client和Service之间的进程间通信是通过Binder驱动程序间接实现的。而Binder Manager是一个守护进程,用来管理Service,并向Client提供查询Service接口的能力。
瀑布跨过险峻陡壁时,才显得格外雄伟壮观