古詩詞大全網 - 成語故事 - 運行在主線程的ContentProvider為什麽不會影響主線程的UI操作

運行在主線程的ContentProvider為什麽不會影響主線程的UI操作

1. contentProvider的初始化是在它自己進程的主線程裏面完成,壹般發生在有人第壹次訪問這個contentProvider或者這個contentProvider進程第壹次啟動,比如這個進程有個service,開機啟動,那麽隨著servier啟動的還有contentProvider.

2. contentProvider有個android:multiProcess屬性,用來配置是否在多個進程裏面,有不同的實例。如果為true,那麽它就會在每個訪問這個contentProvider的進程裏面生成壹個對象。這個時候調用contentProvider,就是哪個線程調用的,contentProvider就運行在那個線程裏面。

如果這個值配置為false,那麽多個進程之間***享壹個contentProvider,通過binder來進行進程之間對象傳遞。如果多個進程同時訪問,會為每個訪問請求分配個線程。所以,這些操作,比如查詢,不會運行在contentProvider進程的主線程。

3. contentProvider查詢等操作是否需要等待,需要binder來設置。

4. 另外,contentProvider查詢的數據傳遞是通過ashmem來完成的。

總而言之,

1. contentProvider的初始化是在主線程裏面完成。

2. 請求查詢等操作的話,應用程序最好自己起壹個線程去完成。

3. contentProvider實現比較復雜,底層交互甚多。