【最新Android高級面試知識點--四大組件】

【最新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動畫)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章