6.1開啓多進程模式
正常情況下,多進程是指:一個App有多個進程。在Android中常規的使用多進程的方法,就是在給四大組件(Activity,Service,Receiver,ContentProvider)在AndroidManifest.xml中指定android:process屬性,也就是說,我們無法給一個線程或者是一個實體類指定它運行時應該在哪個進程,除此之外,還有一種非常規的方法,就是通過JNI再native層去fork一個新的進程,這個就暫不考慮。
進程名以": "爲當前進程的私有進程,其他應用的組件不能和他運行在同一個進程中。而不以":"爲開頭的進程,屬於全局進程,其他應用通過shareUiD方式可以和它跑在同一個進程當中。
不同的應用 ShareUID和簽名一樣,就可以互相訪問對方的私有數據,如data、組件信息等,不管他們是否泡在一個進程總,而要是想讓他們跑再一個進程中,要滿足如下條件:
- shareUID相同
- 簽名相同
- shareUserLabel相同
- process相同
6.2多線程運行機制
所有運行在不同進程的四大組件,只要它們之間需要通過內存來共享數據,那麼都會共享數據失敗,這也是多進程所帶來的主要影響。
一般來說,多進程會造成以下問題:
- 靜態成員和單例模式完全失效。類、對象都不在同一個內存當中。
- 線程同步機制完全失效。不同進程鎖的不是同一個對象
- SharePreferences的可靠性下降。併發寫、併發讀/寫都有可能會出現問題。
- Application會多次創建。創建不同的進程實際上就是創建不同的application。