哈喽大家好,我是Zzz. 给大家分享一篇Framework入门的基础知识文章,内容纯纯原创。
一、Application,Activity和进程的关系?
Application、Activity只是进程虚拟机运行的一个类对象,只是属于系统的一个组件和进程没有直接联系。Android支持为每个组件可以单独进程方式运行。
一个Application就是单独的一个进程这个说法是不对的,Application、Activity只是运行程序中的一个普通的类并不代表一个单独的进程,进程是运行起来的一个程序。
二、Android系统进程间的相互关系
一个Application或者展示Activity的进程运行在Android系统中需要那些东西进行服务?
Zygote进程:负责孵化之后服务和应用的进程(孵化进程)是所有系统进程的父进程由Zygote来孵化各种进程;
System_server进程:是系统核心服务的一个进程,这个进程包含了系统中核心Service的运行,给系统提供如:Window的管理、Activity的管理,系统的核心功能都在System_server中;
SurfaceFlinger进程:主要跟驱动层、硬件层进行交互,使屏幕进行绘制,如App进程产生的界面由SurfaceFlinger进行的绘制;
ServiceManager进程:App开发中用的getService()就是在和ServiceManager进行交互,这个进程就是保存了一个类似于HashMap,保存了System_server中一些核心服务把服务中的引用交给ServiceManager使得我们的App进程向ServiceManager要需要的服务;
每一个进程直接各自都是相互独立的他们之间的通信或控制只能通过跨进程通信的方式进行交互;除了Linux中Socket、共享内存、管道等一些方式Android特别的通信方式为Binder通信,底层实现是通过系统调用和底层驱动层进行实现。
SurfaceFlinger中包括匿名共享内存,因为binder通信是由内存大小限制的由于SurfaceFlinger要显示一个界面是一个巨大的图片占用的内存比较多这个时候就需要用到匿名共享内存;
三、哪些代码是运行在App进程的、哪些又是运行在System_server进程的?
1、除了自己写的业务代码,一般Android SDK里面的代码都是运行在App进程的,sdk里面是android.jar(在sdk下的platfroms/android-*/)也就是编译出的framework.jar,因为app需要依赖sdk才可以编译通过,说明各个app肯定会使用sdk中的代码,这个代码属于所有app共用的,故修改一个类就会影响所有的应用进程;
2、一般com.system.server.*相关的类都是运行在system_server,这一部分平时是接触不到的,由于普通应用根本无法引入相关的server代码,因此这次代码属于system_server特殊应用自己的代码,普通应用只能通过跨进程通信的方式与其通信获取相关数据及接收控制,一般java代码对应的是services.jar;
四、主要jar包介绍
Android源码编译之后会有很多文件,在源码路径out/target/product/generic_x86_64/system/framework/文件下
1、framework-res.apk----》android系统资源库(如图片、布局、dialog、主题、控件都在这里)
2、framework.jar-----》Android的sdk中核心代码
3、services.jar-----》框架层服务端的编译后jar包
五、面对实际项目需求到底该修改那一块的代码呢?修改原则是什么?
需要具体分析需求,按以下几步的优先级进行:
1、明确业务需求,分析业务是否可以应用层面(即App的业务代码)通过标准接口实现,如果是真实的项目又同时要考虑到是否这个App可能被其他的第三方应用替代,或者卸载等;
2、如果业务代码无法通过标准接口实现,则在考虑应用程序的框架修改是否可以实现,也就是android sdk部分,即framework.jar,要考虑该部分代码是运行于所有的app,要考虑功耗影响及稳定性,尽量把修改面变小,不可修改sdk的标准接口,只能考虑新加,但是接口的具体实现可以根据情况改变,修改错误可可能黑屏;
3、framework.jar部分的框架也无法满足时候,就需要考虑System_server中去修改相关的Service等是否可以满足,这一部分更需要谨慎修改,一不小心很可能导致系统无法启动黑屏;文章来源:https://www.toymoban.com/news/detail-843043.html
文章来源地址https://www.toymoban.com/news/detail-843043.html
到了这里,关于Android Framework基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!