站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Android 安卓

【APP/Android】最常用的抽象類別:Context,重點筆記整理

tags: APP Android

Common 簡介

概念

  1. 四大組件 (四位主角) 和其他演員 (Button,TextView,LinearLayout …),必須工作在鏡頭 (Context) 環境下才能將戲傳遞給觀眾
  2. Context 子類別
    • ContextImpl:實作 Context
    • ContextWrapper:包裝、封裝,且初始化過程會創建ContextImpl實作Context
      • ContextThemeWrapper:Activity 需要主題
      • Service, Application:不需要主題,因為不需要介面,完全在背景處理

Application 和 四大組件

  1. Application:通過Activity或Service的getApplication()方法獲取,也可以在任何繼承Context類的的對像中通過getApplicationContext()來獲取

  2. Activity:有介面。繼承自ContextWrapper,對應的context對像都是唯一的

  3. Services:背景執行服務。繼承自ContextWrapper,對應的context對像都是唯一的

  4. BroadReceiver:不擁有Context,通過onReceiver()方法傳入一個Context對象

  5. 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 參考資料

  1. Context 圖片:
    https://sites.google.com/site/terrylai14/home/android-context-yuan-li
  2. 理解Android Context:http://gityuan.com/2017/04/09/android_context/
  3. Context 都沒弄明白,還怎麼做 Android 開發?
    https://read01.com/zh-tw/aQKAKQ.html#.WsMvCIhuZPY
  4. Context,什麼是Context?
    http://bxbxbai.github.io/2014/07/16/context/
  5. What is ‘Context’ on Android?
    https://stackoverflow.com/questions/3572463/what-is-context-on-android
  6. android学习—— context 和 getApplicationContext():https://blog.csdn.net/janronehoo/article/details/7348566

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽