一、ContentProvider
1.ContentPriovider 是什麼?
1)Android 中核心應用組件(Component)之一
2)Android 中的內容提供者?
2.ContentProvider 應用場合?
ContentProvider 對象實現了APP內部數據的對外(可能是本進程的其它組件,
也可能是跨進程的組件)共享。
例如:
1)手機聯繫人數據對外共享。
2)手機相冊中數據對外共享。
3).......
3.ContentProvider 應用的構成分析?
1)Data(要對外共享的數據)
2)ContentProvider對象(是對外共享)
3)URI(統一資源標識,用於標識具體資源)
4)ContentResolver對象(可以簡單理解爲ContentProvider的客戶端對象)
4.ContentProvider 應用的具體實現?
1)ContentProvider 端的實現(暫且理解爲服務端):數據提供端
a)數據(Data)
b)編寫ContentProvider(直接或間接繼承ContentProvider類)
c)註冊ContentProvider(AndroidManifest.xml)
2)ContentResolver 端的實現(暫且理解爲客戶端):數據訪問端
a)獲得Context對象
b)獲得ContentResolver對象
c)獲得要訪問的ContentProvider端的URI
d)執行ContentResolver對象的相關方法進行數據處理。
說明:ContentResovler對象方法中的方法名與ContentProvider端對象的方法基本是一致的,當我們執行ContentResolver對象的某個方法時,底層會根據方法名及參數設置訪問ContentProvider端對應的方法。
重點掌握ContentProvider的訪問流程,瞭解ContentProvider對象方法的構建。
5.訪問Android系統提供的ContentProvider?(重點)
1)訪問系統提供的媒體信息(音頻,視頻,圖片)
2)訪問系統提供的聯繫人信息
步驟:
1)獲得ContentResovler
2)獲得URI(Media,Phone,....)
3)執行查詢(query(.....))
6.CursorLoader 在異步訪問provider中的應用?
CursorLoader 底層默認採用異步加載機制訪問數據,並可以對數據提供緩存機制,以提供對數據的訪問效率。假如在Activity中要訪問ContentProvider中提供的數據,建議使用CursorLoader.
CursorLoader 對象的應用步驟:
1)獲得LoaderManager(getLoaderManager())
2)初始化CursorLoader (初始化的同時註冊一個回調監聽對象LoaderCallbacks)
3)執行監聽對象中的相關方法?
a)onCreateLoader (初始化loader時執行)
b)onLoadFinished (數據加載完成執行)
c)onLoaderReset (loader重置或銷燬時執行)
7.ContentProvider 應用FAQ?
1)ContentProvider 對象應用場合?(應用數據對外共享,例如微信訪問聯繫人數據)
2)ContentProvider 對象應用優勢?(提供了對數據的統一訪問方式)
3)ContentProvider 對象對外共享數據的格式?(數據庫,文件assert,....)
4)ContentResovler 對象的作用?(是ContentProvider對外的一個窗口)
5)URI 是什麼,在ContentProvider應用中充當的角色?(統一資源標識,用於標識ContentProvider資源)
6)CursorLoader 應用優勢?(異步加載,防內存泄露,數據緩存,便於管理)
//======================================================
1.Service 是什麼?
1)Android 中核心應用組件(生命週期方法).
2)Android 中的Context(資源訪問能力)
3)Android 中的應用服務(此服務不能呈現view,工作於後臺)
2.Service 應用場合?
Service 通常用於執行一些"長時間"的後臺耗時操作(這些耗時操作也是要啓動工作線程的),例如下載,音樂的播放等.
FAQ?
Serivce 中啓動工作線程執行長時間耗時操作相對於Activity啓動
工作線程執行長時間耗時操作有什麼優勢?
Service 服務所在的進程運行在後臺執行長時間的耗操作時生命力更加頑強。
Android 中進程的類型及生命力(如下由高到低)?
1)前臺進程(正在於用戶交互的進程):生命力最頑強,不允許被kill.
a)有activity正在前臺運行(正在與用戶交互)
b)有通知(Notification)綁定了正在運行的service
2)可見進程(進程可見,但不可操作)
3)服務進程(有service正在後臺運行,且進程不可見)
4)後臺進程(後臺沒有service運行,前臺又沒有可見組件在運行)
5)空進程(沒有任何組件的進程)
Android 系統在內存不足時會選擇一些優先級比較低的進程執行kill操作。
3.Service 的應用類型?
1) 啓動模式的Service.
2) 綁定模式的Service.
3) 混合模式的Service.
4.Service 應用的構建?
1)創建Service (直接或間接的繼承Service)
2)註冊Service (在AndroidManifest.xml中進行註冊)
3)啓動或綁定service(startService,bindService,.....)
4)在Service對象相關生命週期方法中執行業務。
5.Service 啓動模式的應用?
Service 啓動模式相關操作:
1)創建Service,重寫相關方法
2)註冊Service (AndroidManifest.xml)
3)啓動Service:startService(intent)
4)停止Service:stopService(Intent)
啓動模式Service的生命週期方法:
1)onCreate():第一次啓動時執行
2)onStartCommand:每次啓動都會執行
3)onDestory():service 銷燬時執行
啓動模式Service中onStartCommand方法的返回值:
1)START_STICKY (表示service被非正常kill以後會自動重啓)
2)START_STICKY_COMPATIBILITY(是START_STICKY 的一個兼容模式,但進程被非正常kill以後不保證能重新啓動service)
3)START_NOT_STICKY(表示service被非正常kill以後不會重啓service)
4)START_REDELIVER_INTENT(表示service被非正常kill以後會自動重啓,並且會重新傳遞intent);
啓動模式Service中onStartCommand方法的參數:
1)intent (用於值傳遞)
2)flags(表示service的啓動方式,例如intent是否是重寫傳遞的)
3)startId(表示第幾次啓動的service,後續可以通過stopSelf(startId)停止service)
6.IntentService 在啓動模式中的應用?
IntentService 主要應用於啓動模式,此對象在啓動以後會自動創建一個工作線程(HandlerThread),我們可以在此工作線程中執行耗時操作,此耗時操作執行完成,Service會自動關閉。
在構建IntentService 應用時,我們需要構建此類的一個子類類型,然後重寫onHandleIntent方法(此方法運行在工作線程),在此方法中執行我們的業務處理就可以了。