這是個須要細心處理的坑.
android
1 內存:app
在manifest中能夠對各個組件聲明其所在的進程: 工具
android:process=":name"
而後對應的Acitivity, Receiver, Service就會運行在相應的進程中.spa
可是有些類會在全部進程中運行, 好比一些Utils工具類, 好比Application類. 線程
當遇到多個進程並行的時候, 釐清進程所對應的代碼, 避免在進程A裏跑了進程B的代碼.code
好比有一個工具類Utils_procA. 只須要在進程A中工做, 那對於進程B來講, 這個Utils_procA就沒有做用, 是冗餘的代碼, 若是在B中初始化了Utils_procA, 那就消耗了cpu, 也佔用了內存.接口
2 交互:進程
同一個app裏, 有多個不一樣的進程, 通訊是必須的. 內存
進程之間可選的通訊機制有不少:Aidl, broadcast, 這兩個是android提供的, 比較好理解的通訊機制.ci
使用broadcast, 要當心防範ANR, 避免在onReceive()裏處理耗時邏輯.
使用Aidl, 要注意一些時序問題, bind Service須要時間. 這個時間不肯定長短, 若是bind時服務進程尚未啓動, 那最長鬚要等待服務進程啓動完成. 因此bind後可能不能馬上使用aidl, 須要等待ServiceConnection.onServiceConnected()回調成功.
若是有馬上執行服務接口的需求, 要麼回調, 要麼另作一個線程, 輪循判斷是否鏈接ok. 切切不可在主線程等待. 也會anr.