tags: APP
Android
Common 簡介
概念
- 四大組件 (四位主角) 和其他演員 (Button,TextView,LinearLayout …),必須工作在鏡頭 (Context) 環境下才能將戲傳遞給觀眾
- Context 子類別
- ContextImpl:實作 Context
- ContextWrapper:包裝、封裝,且初始化過程會創建ContextImpl實作Context
- ContextThemeWrapper:Activity 需要主題
- Service, Application:不需要主題,因為不需要介面,完全在背景處理
Application 和 四大組件
-
Application:通過Activity或Service的
getApplication()
方法獲取,也可以在任何繼承Context類的的對像中通過getApplicationContext()
來獲取 -
Activity:有介面。繼承自ContextWrapper,對應的context對像都是唯一的
-
Services:背景執行服務。繼承自ContextWrapper,對應的context對像都是唯一的
-
BroadReceiver:不擁有Context,通過
onReceiver()
方法傳入一個Context對象 -
ContentProvider:管理中央資料存放庫的存取權。不擁有Context,通過
getContext()
方法傳入一個context對象
會使用到 Context 的 Case
- 啟動Activity (startActivity)
- 啟動Service (startService)
- 彈出Toast
- 發送廣播(sendBroadcast), 註冊廣播接收者(registerReceiver)
- 獲取ContentResolver (getContentResolver)
- 獲取類加載器(getClassLoader)
- 打開或創建 資料庫(openOrCreateDatabase)
- 獲取資源(getResources)
Context 作用域
補充說明
- 這3個任務:“Show a Dialog”, “Start a Activity”, "Layout Inflation:,是讓Activity來處理這些與UI有關的任務
- 1,2,3註解:
- 這幾個Context只有Activity的Context是“看的見的”,其他組件的Context都是“看不見的”
- 看的見的:Dialog,Activity等,就必須要用Activity的Context
- 看不見的:調用getString或getResource方法獲取res文件夾下的資源時,所有的Context對像都可以使用
如何取得 Context
方法1:View.getContext()
- 返回當前View對象的Context對象,通常是當前正在展示的Activity對象.
- 範例:
TextView tv = new TextView(getContext());
方法2:Activity.getApplicationContext()
- 獲取當前Activity所在的應用的Context對象
方法 | 說明 |
---|---|
getApplication() | 用來獲取Application實例的,而 Application 本身就是一個 Context ,所以在 Activity 和 Service 使用這兩個方法的結果是一樣的。 |
getApplicationContext() | 但BroadcastReceiver 中也想獲得 Application 的實例,就必須使用此方法 |
- 範例:
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
方法3:this 或 Activity.this
- 返回當前的Activity
方法4:ContextWrapper.getBaseContext()
- 獲取一個ContextWrapper進行裝飾之前的Context
- 不常用
補充:生命週期比較
方法 | 生命週期 |
---|---|
getApplicationContext() | Application,Application摧毀它才摧毀 |
this 或 Activity.this | Activity,Activity摧毀它才摧毀 |
getBaseContext() | 返回由構造函數指定或setBaseContext()設置的context |
Reference 參考資料
- Context 圖片:
https://sites.google.com/site/terrylai14/home/android-context-yuan-li - 理解Android Context:http://gityuan.com/2017/04/09/android_context/
- Context 都沒弄明白,還怎麼做 Android 開發?
https://read01.com/zh-tw/aQKAKQ.html#.WsMvCIhuZPY - Context,什麼是Context?
http://bxbxbai.github.io/2014/07/16/context/ - What is ‘Context’ on Android?
https://stackoverflow.com/questions/3572463/what-is-context-on-android - android学习—— context 和 getApplicationContext():https://blog.csdn.net/janronehoo/article/details/7348566
沒有留言:
張貼留言