这些Framework 题你会吗? 在线等,急急急

在这里插入图片描述

前言

感概一下最近的Android面试情况,因为快临近金九银十,能约到的面试也是越来越多,但是有不少小伙伴也提到了一个问题:“目前Android的面试基本上都会被问到Framework,让不少人苦不堪言"。

这个情况也是日积月累形成的,现在进军程序员的人太多了,公司有的挑,我们没得选,那么公司肯定需要更好更强的员工,而Framework不但是一个很好的检测手段,也能提前为公司招一批底层系统开发程序员。

提到正事,先挂出最近小伙伴给我发的问题

ActivityManagerService是什么?什么时候初始化的?有什么作用

ActivityManagerService 主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块类似。ActivityManagerService进行初始化的时机很明确就是在 SystemServer进程开启的时候,就会初始化ActivityManagerService。

(系统启动流程)

如果打开一个App的话,需要AMS去通知zygote进程

所有的Activity的生命周期AMS来控制

ActivityThread是什么?ApplicationThread是什么?他们的区别

ActivityThread
在Android中它就代表了Android的主线程它是创建完新进程之后,main函数被加载,然后执行一个loop的循 环
使当前线程进入消息循环,并且作为主线程
ApplicationThread
ApplicationThread是 ActivityThread的内部类是一个Binder对象。在此处它是作为IApplicationThread对象的server端等待client端的请求然后进行处理,最大的client就是AMS.

Instrumentation是什么?和ActivityThread是什么关系?

AMS与ActivityThread之间诸如Activity的创建、暂停等的交互工作实际上是由Instrumentation具体操作的。

每个Activity都持有一个Instrumentation对象的一个引用,整个进程中是只有一个Instrumentation。

mInstrumentation的 初始化在 ActivityThread:: handleBindApplication函数可以用来独立地控制某个组件的生命周期。

“startActivity会调用’mInstrumentation .execStartActivity0 ; mInstrumentation 掉Activity的startActivity 方法用AMS,AMS 通过 socket 通信告知 Zygote 进程 fork 子进程

ActivityManagerService和zygote进程通信是如何实现的

应 用启动时,Launcher进程请求AMS。
AMS发送创建应用进程请求 ,Zygote进程接受请求并fork应
用进程 客户端发送请求
调 用 Process.start() 方法新建进程
连 接 调 用 的 是
ZygoteState.connect()
方 法
, ZygoteState 是
ZygoteProcess 的 内 部 类 。
ZygoteState里 用 的 LocalSocket

public static ZygoteState connect( LocalSocketAddress address)
throws IOException {
    
    
DataInputStream zygoteInputStream = null ;
BufferedWriter zygoteWriter =
null;
final LocalSocket zygoteSocket = new LocalSocket( ) ;
try {
    
    
zygoteSocket .connect(address);
zygoteInputStream = new DataInputStream(zygoteSocket .getInputStream()) ;
zygoteWriter =
new BufferedWriter( new OutputStreamWriter(
zygoteSocket .getOutputStream()) , 256) ;
} catch (IOException ex) {
    
    
try {
    
    
zygoteSocket .close() ;
} catch (IOException ignore) {
    
    
}throw ex ;
}
return new ZygoteState(zygoteSocket , zygoteInputStream , zygoteWriter ,
Arrays .asList(abiListString .split(","))) ;
}

Zygote 处理客户端请求
Zygote 服 务 端 接 收 到 参 数 之 后 调 用
ZygoteConnection.processOneCommand()
处 理 参 数

,并fork 进 程 最 后 通 过 fifindStaticMain() 找 到
ActivityThread 类 的main() 方 法并 执 行, 子进 程就 启动 了

这里这是选出了几个问题 回答。更多更全面的Framework 面试题解析可以扫描下方二维码

## 《Andrio Framework面试题解析合集》

●系统启动流程面试题解析

●Binder面试题解析

●Handler面试题解析

●AMS面试题解析

img

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Misdirection_XG/article/details/132226196