手機(jī)開機(jī)到點(diǎn)擊應(yīng)用程序縮略圖標(biāo)的流程
1、開機(jī)
2丘薛、BootLoader來(lái)加載操作系統(tǒng)嘉竟,是通過(guò)C++來(lái)完成的
3、Linux系統(tǒng)
4洋侨、啟動(dòng)一個(gè)進(jìn)程舍扰,用于管理手機(jī)頁(yè)面
5、系統(tǒng)服務(wù)SystemService
WindowManagerService
ActivityManagerService ->通過(guò)launcher.java來(lái)執(zhí)行相應(yīng)的代碼 ->打開應(yīng)用希坚、打開打開文件夾
CameraService……
一個(gè)程序運(yùn)行起來(lái)是一個(gè)進(jìn)程边苹,那么一個(gè)桌面程序運(yùn)行起來(lái)也是一個(gè)進(jìn)程。而執(zhí)行某一個(gè)具體的任務(wù)是由線程來(lái)操作的ActivityThread ->線程的入口點(diǎn)main函數(shù)->點(diǎn)擊圖標(biāo)->啟動(dòng)ActivityThread ->將ActivityThread對(duì)象進(jìn)行綁定 thread.attach(false,startSeq)
->創(chuàng)建儀表類對(duì)象 管理程序的生命周期 mInnstrumentation = new Instrumentation();
->創(chuàng)建上下文ContextImpl context = ContextImpl.createAppContext(this裁僧,getSystemContext()个束,mPackageInfo);
->創(chuàng)建應(yīng)用程序 mInitialApplication = context.mPackageInfo.makeApplication(true,null)聊疲;
app = mActivityThread.mInstrument.newApplication(cl,appClass,appContext)茬底;
->回調(diào)application的onCreate方法: instrumentation.callApplicationOnCreate(app);
當(dāng)系統(tǒng)啟動(dòng)應(yīng)用程序被創(chuàng)建的時(shí)候被調(diào)用,當(dāng)調(diào)用onCreate方法获洲,那么程序已經(jīng)被創(chuàng)建了
在ActivityThread中啟動(dòng)activity的流程
handleLaunchActivity-> performLaunchActivity 這是Activity的創(chuàng)建最核心的部分
-> 創(chuàng)建activity的上下文createContextForActivity
->創(chuàng)建啟動(dòng)的頁(yè)面activity = Instrumentation.newActivity(cl,component.getClassName)
->將界面和window等信息綁定activity.attach(appContext,getInstrumentation,window……)->調(diào)用onCreate方法布局activity界面 mInstrumentation.callActivityOnCreate(activity,r.state)
->activity.performCreate(icicle);
->onCreate(icicle)
在Activity的子類中桩警,通過(guò)實(shí)現(xiàn)onCreate方法 來(lái)對(duì)界面內(nèi)進(jìn)行初始化(UI布局,邏輯初始化)
Context上下文解
Application昌妹、Activity捶枢、Service等都有Context
什么是Context
簡(jiǎn)單來(lái)說(shuō)就是運(yùn)行環(huán)境,提供了訪問系統(tǒng)資源的方法飞崖,可以理解為一種連接設(shè)備與界面之間的橋梁烂叔。
比如我們想訪問某項(xiàng)資源完成某個(gè)任務(wù),那么就需要context訪問系統(tǒng)資源固歪。比如getSharedPreferences蒜鸡、openFileInput胯努、deleteFile、getExternalFileDir(獲取SDK對(duì)應(yīng)的路徑)逢防、startActivity……
我們來(lái)看一下官方解釋:Context本身是一個(gè)抽象類叶沛,是對(duì)一系列系統(tǒng)服務(wù)接口的封裝,包括:內(nèi)部資源忘朝、包灰署、類加載、I/O操作局嘁、權(quán)限溉箕、主線程、IPC和組件啟動(dòng)等操作的管理悦昵。
Context的獲取方式
context和getApplicationContext
大多數(shù)情況下兩者可以通用肴茄。在涉及界面跳轉(zhuǎn)的情況下盡量使用activity的context,其提供了默認(rèn)的任務(wù)棧但指。而applicationContext沒有提供任務(wù)棧寡痰。