zhangmingzhu

Results 29 comments of zhangmingzhu

equals相等的hasCode肯定相等,hasCode相等的equals不一定相等 equals没有重写之前比较的是地址,重写后比较的是内容 往HashMap里面加入元素的时候,首先通过hasCode来判断一下是否有相同的元素 如果只有equals重写了,那么就会判断这两个元素相同,只能插入一个 如果这个时候没有重写hashCode,就没有办法定位到同一个位置,就会再重新插入一个位置,会出现重复元素。 如果重写了hashCode,就会定位到同一个位置,然后往后面的链表里面插入元素,然后通过equals判断两个元素是否相同,如果不相同就插入。

1. 会经过Activity->ViewGroup->view,一次往下传递事件,如果一直不拦截再回调回来。 2. 主要经过三个方法,dispatchTouchEvent(分发事件),oninterceptTouchEvent(是否拦截View中不存在),onTouchEvent(处理)。 3. 三个方法的用法是,先用dispatchTouchEvent来分发事件,然后用oninterceptTouchEvent来判断是否拦截该任务(此方法在dispatchTouchEvent内部),如果不拦截直接dispatch向下回调,如果拦截就调用自己的onTouchEvent来处理事件。 4. 如果由setOnClickListener方法会先执行onClick.

Binder是夸进程通信的其中一种方式,aidl,广播的底层都是基于binder实现的。 binder采用c/s架构,server需要向安卓的Servicemanager进程注册,由该进程管理。client则通过Servicemanager获取到server的代理引用,然后向其发起通信。 优点:相对于其他方式,binder是性能和安全性折中实现 binder有一个binder线程池,专门用来处理binder事物

ThreadLocal用来保存数据,每个线程之间不影响。 用get ,set,和remove来操作里面的数据 它在保存数据的时候首页获取到当前线程,然后将数据保存在当前线程的ThreadMap中,以当前的对象为键,数据为值得格式保存。

1. 布局优化: - 尽量减少布局的嵌套 - 合理使用include,merge以及viewStub 2. apk优化: - 压缩资源 - lint检查 - 图片尽量使用wepng压缩 3. 内存优化 - 尽量不要在onDraw里面创建对象,onDraw会被频繁调用,容易造成内存抖动 - 不用的随想及时释放 - 数据库cursor及时关闭 - 注册的东西,在生命周期结束时要反注册 - 及时关闭io流 - 避免静态内部类的引用

1. 单例模式:保证全局只有一个实例,如网络请求 2. 建造者模式:用于需要设置比较多的属性可以用直接链式,如AlerDialog 3. 工厂模式:用于业务的实体类创建,易于扩展,如BitMapFactory

1. startActivity到AMS 2. AMS发送创建进程的请求到Zygote进程 3. Zygote进程fork一个新进程 4. 创建完进程,AMP(ActivityManagerProxy)发送attachApplication请求到AMS 5. AMS执行realStartActivityLocked启动Activity 6. ApplicationThreadProxy发送scheduleLaunchActivity到App进程的ApplicationThread 7. 通过handler发送Launch Activity消息来启动Activity 8. ActivityThread就可以开始OnCreate