Activity本质和内部实现机制
今天把Activity全部?jī)?nèi)容精簡(jiǎn)一遍,activity最后一篇!
Activity本質(zhì)和內(nèi)部機(jī)制
與Activity相關(guān)的Framework層類
ActivityThread本質(zhì)上不是一個(gè)線程,是一個(gè)java類,ActivityThread是所在主線程中的一個(gè)類,它的啟動(dòng)是調(diào)用main方法,其中內(nèi)部有幾個(gè)重點(diǎn)方法:
Looper.prepareMainLooper(); ActivityThread thread = new ActivityThread(); thread.attach(false); Looper.loop()ActivityThread的main()中,首先調(diào)用Looper.prepareMainLooper();然后調(diào)用ActivityThread()方法,但事實(shí)上這個(gè)方法并沒(méi)有繼承什么,是一個(gè)普通的方法,最重要的是attach()方法,這個(gè)方法主要與ActivityManagerService進(jìn)行交互,首先調(diào)用ActivityManagerNative對(duì)象,這是一個(gè)遠(yuǎn)程代理接口,以獲取遠(yuǎn)程代理對(duì)象。之后調(diào)用attachApplication(),這個(gè)也是對(duì)Bundle傳輸數(shù)據(jù)。ActivityThread啟動(dòng)完成后如何通知AMS呢?主要的方法有:
IActivityManager mgr = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);
下面來(lái)看ApplicationThread,這是一個(gè)很關(guān)鍵的類,它是繼承自ApplicationThreadNative類,ApplicationThreadNative類是一個(gè)Binder的子類,說(shuō)明ApplicationThread需要與遠(yuǎn)程端進(jìn)行通信,即與ActivityManagerService進(jìn)行通信,通信的過(guò)程封裝成一個(gè)Binder對(duì)象。
ActivityClientRecord是客戶端Activity的一個(gè)描述的類,是對(duì)客戶端的描述,
Context是一個(gè)接口,Activity其實(shí)是Context的一個(gè)子類。
Activity的生命周期的回調(diào):
Instrumentation用于輔助創(chuàng)建Application, 對(duì)生命周期的管理,啟動(dòng)Activity。
ActivityManagerNative用于與遠(yuǎn)程Service進(jìn)行數(shù)據(jù)交互
H handle也是與遠(yuǎn)程數(shù)據(jù)交互相關(guān)的類,調(diào)用了,handleLaunchActivity, performLaunchActivity。 classLoader加載相關(guān)Activity,Application對(duì)象創(chuàng)立,之后,activity.attach()
額,源碼看的心力憔悴,認(rèn)輸,這次就先這樣吧,等我醞釀一段時(shí)間再說(shuō)吧……尷尬ing(口吐白沫中……)
總結(jié)
以上是生活随笔為你收集整理的Activity本质和内部实现机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 概览屏幕(最新动态屏幕、最近任务列表)
- 下一篇: Service中的绑定服务总结