【最新Android高級面試知識點乾貨分享(四)】
轉載請註明出處!
三、Service/IntentService
Service作爲四大組件之一,也是面試官喜歡問的。
一般包括:啓動方式、生命週期、Binder機制、保活以及喚醒等。
-
啓動方式:startService/bindService
-
生命週期:
onCreate--onStartCommand--onDestroy onCreate--onBind--onStart---onUnbind--onDestroy
-
Binder機制:IBinder/Stub/AIDL
屬於C/S架構,Service通過onBind方法, 返回給客戶端IBinder接口實例。 更詳細的見下面的AIDL
由於Service默認支行在主線程(ActivityThread)中,因此當在Service中執行耗時操作時,會阻塞UI線程,導致ANR.爲此係統提出了IntentService來在子線程中開啓服務,處理耗時操作。
-
IntentService:
原理:是在onCreate()方法裏面, 通過HandlerThread來創建線程,開啓線程
四、BroadCast/LocalBroadCast
廣播知識點:種類、註冊方式、使用廣播時在應用安全方面注意事項。
廣播的種類有:有序廣播、無序廣播、粘性廣播
註冊方式:靜態註冊(AndroidManifest.xml)、動態註冊
BroadCast是系統級別,採用Binder通信機制;
LocalBroadCast本地廣播,屬應用級別,採用Handler通信機制。
如果沒有與第三方通信,則推薦使用LocalBroadCast。
五、ContentProvider
內容提供者,專用於應用 間數據共享。
注意點:
-
ContentObserver
-
ContentResolver:
ContentObserver用於觀察ContentProvider中的變化, 而它是通過ContentResolver的 registerContentObserver()與unregisterContentObserver() 來進行註冊與註銷。 當ContentProvider中有變化時, 就會回調ContentObserver中的onChange()方法
由於Android權限,在Android7.0以上,得用FileProvider(爲ContentProvider的子類)
Android 7.0 禁止在應用外部公開 file:// URI,所以我們必須使用 content:// 替代 file://,這時主要需要 FileProvider 的支持,還需要動態申請訪問SD卡目錄的權限。
1,在AndroidManifest.xml中指定
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermission="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_test"></meta>
</provider>
2,在res下創建xml目錄,然後在res/xml/下創建file_path_test的xml文件(主要是指定sdk的路徑)
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="." name="external_storage_root">
</paths>
(下一篇將整理分享Android自定義View、Android動畫)