首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 如何从应用深入到Framework(三)

赞赏,转发,都是大爱

先回答留言提出的问题,当前在做应用开发,想做framework,该如何实施。

我们先来讲下framework是什么。这个单词的意思为框架,什么框架呢?我们一个APK由哪些组成呢?

xml配置组件,如何解析这个xml,组件的类别具体如何实现,比如activity生命周期,service启动过程,广播的处理流程,前台广播,后台广播,ANR怎么产生的,系统怎么处理的。这些都是系统提供的,这种应用开发,无法绕过的,调用系统方法的这些内容,就是框架。

我们开发应用,主要是用系统接口开发。系统framework的任务是完成系统故障处理,同时扩展功能接口,让应用调用更多的接口,这块就是framework要做的事情。

主体框架需要掌握的内容:

1 应用启动流程

2 应用创建过程,知道fork原理,知道socket通信

3 广播处理流程,超时响应,系统如何跟应用交互,applicationhandle activitytherad 的关键代码

4 anr是什么,系统代码在哪

5 Lmk机制是什么,怎么计算的adj,怎么杀掉进程

6 按键处理inputreader,触屏响应在哪,系统phonewindowmanager的逻辑代码

7 系统服务对应的jni逻辑,因为要进入linux,必然就变成了本地语言,这块要学习

8 View的绘制流程,事件传递过程,掌握viewrootimpl和window的关联,和phonewindow的关系

暂时就想到这些,art虚拟机学习,掌握理论就行,懂得它的运行机制,内存管理方案

后续还要继续深造,就去看驱动添加,系统加载驱动的方式。这里面涉及了hal 添加,以及linux的哲学,一切都是文件

看驱动,就会发现很多中断,比如按键,触摸,都是以中断的方式响应,系统收到中断,跑到注册的中断向量表,查出此中断位对应的方法回调,按键响应方法,拿到按键信息,封装好后,通过sendevent发出去,然后我们的inputreader接到,然后InputDispatcher解析,传给当前的fouse焦点窗口,然后经过viewRootImpl进行交给当前的跟view,向我们的子view传递,进行处理,响应。

好了,回到上节问题,继续来讲,编程语言的发展史。

起初,只有打孔纸片,通过它的阻挡光线传输,来做到零和一的区分,然后推动硬件执行。如果有个地方错了,那就重新打孔,很费纸,这点倒是和宅男很像。

打孔是个技术活,要有超强的记忆,00100是加,01100是减,这些口诀都埋藏在心底,传男不传女,神秘莫测。于是就很晦涩,像手抄版的书籍,流传在一小众手里,别人如同天书一般,不懂其中真意。

于是,有好事者一看,就拿出来做了个译码,记录下来每个序列的真正含义,后来人一看便懂,发现没有那么多玄机。

于是

00100 就记作add

01100就记作sub

等等一系列的记录出来了,而这个记录最终要回到那些数字,否则机器不懂你这高级语言。

这里00100就是机器语言,机器执行用的这个,我们写的时候,add sub替代,这个就是汇编语言了。

汇编语言变成机器语言用了汇编器,将我们描述的可以理解的东西变成机器可以懂的语言。

汇编语言最头疼的是,我一个函数修改完了,下次修改后,如果写了好长,我之前写的跳转指令,有可能需要从jmp near换成jmp long ,代码要去修改,写错了一出代码,有可能要全部修正,写的真累,堆栈都要自己关注。

于是就出现了c语言,解决那些晦涩的前期准备,让编译器帮你处理,你只安心的写自己的代码,不需关注堆栈平衡,不需关注具体会变成什么机器语言,这时我们使用arm编译器就会将此源码变成arm的汇编语言,然后转成机器语言,跑在arm板子上。如果我们选择gcc,编译linux的elf文件,那么就在linux可以运行啦。

我们发现这个c可以只写一份,选择不同的编译器,就能编到对应的指令设备中运行。比之前一个个去写,效率太高了。

c语言太过经典,直接可以嵌入汇编,来完成硬件驱动程序,c里面存在的都是方法,我们将一个个变量变成结构体来做个整体,但是没有将方法也归进来,导致方法和属性分离,不便于理解。

于是c++出来了类的概念,将属性和拥有的方法整在一起,作为一个整体出现,对外人来说,一目了然,都有什么,都可以干什么,清清楚楚。

c c++一直一来自己管理内存,于是内存泄露问题太严重,嵌入式系统上面,时不时就挂掉了,很是郁闷,问题出现也不好解决,很难定位,于是就有人琢磨,可不可以自动标记,自动决策释放内存,让用户别在意这个,专心写代码。

于是Java就来了。Java搞出来一个标准,在每个平台都开发出来,让它写出来的东西,在每个平台都能得到解析,正确运行,于是便号称跨平台了。实质上是他们在每个平台做了适配,让他的东西跑在他们适配好的环境上,即可。

Java语言,是需要编译成class才能运行。那么就有人说,我不想编译,就想写的直接用,直接改,直接运行多爽。

于是shell perl python就出来了。他们充当了解析器,把语法解析后运行,shell perl以其自由散漫著称,不是自己写的,很难读懂。语法自由,用法多变,格式也比较自由,写的人畅快淋漓,读的人泪如雨下。

于是python横空出世,加入了强制对齐,类的概念进来,让无组织纪律的脚本语言,能够走的更加规整一些。

-未完,待续-

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180823G0RPM900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券