昨天培训结束后赶飞机,走的很匆忙,没来得及和Jollen好好聊聊。稍微记录点心得体会:
1)课上提了一个加速APP启动的idea:可以用类似cache的方法将解释过的bytecode保存起来。算是JIT和普通解释的折中方法,不过还没有实现。
2)Zygote是第一个被运行的Android进程(不是Linux进程,那是init)。一般只有Zygote是通过main来运行,其他Android进程都是folk Zygote来的,这样可以复用Zygote启动时preload的class库。但也有不用folk,直接dalvikvm来启动,传说HTC有高级UI就是直接启动的。
3)讲了AIDL这个自动生成Iinterface接口继承代码的工具,为啥要继承这个接口呢,因为自己的Service要定义接口。同时Service还要继承Binder类,这样Service就有了一套封装好的进程交换方法,而不用调用binder IPC的底层函数。Manager和Service通过继承Binder类提供方法来传递数据这种方式比较好,这也是一种优化Android Framework的方法吧。具体做法为通过AIDL把Service封装为Proxy Obj(继承了Binder和接口,又称分身),位于Manager进程,通过继承而来的Binder方法和Service进程(继承Proxy Obj,是实体)通讯。A系统大部分都改成这种模式,还有少数Service没改,但是很多OHA厂商自己都改了,当然是为了优化。
具体步骤:
(0)写AIDL文件
(1)写LedService.java 继承ILedservice.stub(AIDL生成的Proxy Obj)
(2)写LedManager.java 它的构造函数要拿到Proxy Obj.
4)问了几个问题
问:Android有什么好的调试方法?
答:一般就GDB、ADB,要根据情况选择。
我:我们都用printk和LOG,好可怜
问:Android的代码管理和分工协作的方法:
答:git
问:Android的2D加速怎么做?
答:每个厂商都不同,做法不一
btw:架构师真是个好职业,天天画画class图和sequence图。
阅读(898) | 评论(0) | 转发(0) |