先看繼承關(guān)系
image.png
可以看到我們熟悉的Application和Activity葫男,Service都是繼承或間接繼承的ContextWrapper础米。差別就在Activity中間還有一層ContextThemeWrapper
Context的變量主要都是定義了一些常量分苇。剩下的都是一些方法。下面會(huì)介紹一些.
ContextWrapper中只有一個(gè)成員變量就是 Context mBase,然后所有的抽象方法的實(shí)現(xiàn)都是調(diào)用mBase.相同方法名屁桑。意思就是什么都沒做医寿。暫時(shí)搞不明白這樣實(shí)現(xiàn)的目的。
ContextImpl是Context具體的實(shí)現(xiàn)類蘑斧。
看繼承關(guān)系靖秩,我們知道了1個(gè)APP里面包含的Context個(gè)數(shù):Activity個(gè)數(shù)+Service個(gè)數(shù)+1(Application)
Application的創(chuàng)建是在ActivityThread里面的Handler的HandbindApplication()創(chuàng)建,這里涉及到了APP啟動(dòng)流程竖瘾,另外再分析
Activity也是在創(chuàng)建的時(shí)候通過ActivityThread的performLaunchActivity()方法調(diào)用的createBaseContextForActivity創(chuàng)建的盆偿。
Context部分作用:
1.操作Theme:如setTheme(),getThemeResId()准浴,getTheme()事扭,initializeTheme();
2.獲取APP配置信息和資源信息相關(guān):getPackageManager(),getResources()乐横,getAssets()求橄,getBasePackageName(),getPackageName()葡公,getApplicationInfo()罐农,getPackageResourcePath()等
3.操作數(shù)據(jù)庫(kù)
4.操作文件
5.操作SharedPreferences
6.啟動(dòng)Activity:startActivity()等
7.啟動(dòng)發(fā)送Broadcast:sendBroadcast()等
8.綁定service:bindService()等
9.注冊(cè)Receiver:registerReceiver()等
10.檢查權(quán)限:checkPermission()等