Android 開發中踩過的坑之八:多進程問題

來源:互聯網
上載者:User

標籤:

這是個需要細心處理的坑. 

1 記憶體:

在manifest中可以對各個組件聲明其所在的進程: 

android:process=":name"

然後對應的Acitivity, Receiver, Service就會運行在相應的進程中.

但是有些類會在所有進程中運行, 比如一些Utils工具類, 比如Application類. 

當遇到多個進程並行的時候, 釐清進程所對應的代碼, 避免在進程A裡跑了進程B的代碼.

比如有一個工具類Utils_procA. 只需要在進程A中工作, 那對於進程B來說, 這個Utils_procA就沒有作用, 是冗餘的代碼, 如果在B中初始化了Utils_procA, 那就消耗了cpu, 也佔用了記憶體.


2 互動:

同一個app裡, 有多個不同的進程, 通訊是必須的. 

進程之間可選的通訊機制有很多:Aidl, broadcast, 這兩個是android提供的, 比較好理解的通訊機制.

使用broadcast, 要小心防範ANR, 避免在onReceive()裡處理耗時邏輯.

使用Aidl, 要注意一些時序問題, bind Service需要時間. 這個時間不確定長短, 如果bind時服務進程還沒有啟動, 那最長需要等待服務進程啟動完成. 所以bind後可能不能立刻使用aidl, 需要等待ServiceConnection.onServiceConnected()回調成功. 

如果有立刻執行服務介面的需求, 要麼回調, 要麼另做一個線程, 輪循判斷是否串連ok. 切切不可在主線程等待. 也會anr.


Android 開發中踩過的坑之八:多進程問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.