手機開機到點擊應用程序縮略圖標的流程

1、開機
2、BootLoader來加載操作系統(tǒng),是通過C++來完成的
3、Linux系統(tǒng)
4、啟動一個進程,用于管理手機頁面
5、系統(tǒng)服務SystemService
WindowManagerService
ActivityManagerService ->通過launcher.java來執(zhí)行相應的代碼 ->打開應用、打開打開文件夾
CameraService……
一個程序運行起來是一個進程,那么一個桌面程序運行起來也是一個進程。而執(zhí)行某一個具體的任務是由線程來操作的ActivityThread ->線程的入口點main函數(shù)->點擊圖標->啟動ActivityThread ->將ActivityThread對象進行綁定 thread.attach(false,startSeq)
->創(chuàng)建儀表類對象 管理程序的生命周期 mInnstrumentation = new Instrumentation();
->創(chuàng)建上下文ContextImpl context = ContextImpl.createAppContext(this,getSystemContext(),mPackageInfo);
->創(chuàng)建應用程序 mInitialApplication = context.mPackageInfo.makeApplication(true,null);
app = mActivityThread.mInstrument.newApplication(cl,appClass,appContext);
->回調(diào)application的onCreate方法: instrumentation.callApplicationOnCreate(app);
當系統(tǒng)啟動應用程序被創(chuàng)建的時候被調(diào)用,當調(diào)用onCreate方法,那么程序已經(jīng)被創(chuàng)建了

在ActivityThread中啟動activity的流程
handleLaunchActivity-> performLaunchActivity 這是Activity的創(chuàng)建最核心的部分
-> 創(chuàng)建activity的上下文createContextForActivity
->創(chuàng)建啟動的頁面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的子類中,通過實現(xiàn)onCreate方法 來對界面內(nèi)進行初始化(UI布局,邏輯初始化)
Context上下文解
Application、Activity、Service等都有Context
什么是Context
簡單來說就是運行環(huán)境,提供了訪問系統(tǒng)資源的方法,可以理解為一種連接設備與界面之間的橋梁。
比如我們想訪問某項資源完成某個任務,那么就需要context訪問系統(tǒng)資源。比如getSharedPreferences、openFileInput、deleteFile、getExternalFileDir(獲取SDK對應的路徑)、startActivity……
我們來看一下官方解釋:Context本身是一個抽象類,是對一系列系統(tǒng)服務接口的封裝,包括:內(nèi)部資源、包、類加載、I/O操作、權限、主線程、IPC和組件啟動等操作的管理。
Context的獲取方式
context和getApplicationContext
大多數(shù)情況下兩者可以通用。在涉及界面跳轉(zhuǎn)的情況下盡量使用activity的context,其提供了默認的任務棧。而applicationContext沒有提供任務棧。