概念
首先,我們知道進程是系統(tǒng)分配資源和調度的基本單位昼激。每個進程都有自己獨立的資源和內存空間庇绽,別的進程是不能隨意訪問的。一般情況下癣猾,一個應用默認有一個(主)進程敛劝,進程名即包名余爆。Android多進程即一個應用擁有多個進程纷宇。那么如何讓應用擁有多進程呢?
android:process
實現(xiàn)多線程需依賴android:process
屬性蛾方,四大組件在manifest中注冊時設置這個屬性像捶,標記所屬進程。兩種形式:
- 以
:
開頭桩砰,私有進程拓春,無法跨應用共用,進程名稱:
前加上包名亚隅。 - 以小寫字母開頭硼莽,全局進程,可被多個應用共用煮纵,字符串即進程名懂鸵。
<service android:name=".MyService1" android:process=":remote"/>
<service android:name=".MyService2" android:process="remote"/>`
優(yōu)缺點
** 優(yōu)點:**
- ** 分擔主進程內存壓力**偏螺。隨著應用越來也大,內存占用越來越大匆光,可以將一些獨立的組件放到不同的進程套像。
- ** 增加App可用內存**。在Android中终息,默認情況下系統(tǒng)會為每個App分配一定大小的內存夺巩,比如從最早的16M到后面的32M或者48M等,具體的內存大小取決于硬件和系統(tǒng)版本周崭。但是這個限制是針對進程的柳譬,所以多進程可增加應用可用內存。
- ** 獨立于主進程及進程守護等**续镇。
** 缺點:**
- ** 數(shù)據(jù)共享問題**征绎。不同進程之間內存無法共享,通訊比較麻煩磨取。
解決方式:使用AIDL人柿、Intent、Messenger處理忙厌。 - ** 耗電量**凫岖。多占用內存容易導致應用卡頓,耗電量增加逢净。
- ** Application 中 onCreate多次初始化**哥放。每個進程在創(chuàng)建的時候,都會執(zhí)行Application的onCreate進行初始化爹土,如果這時候沒有針對不同進程處理甥雕,onCreate的初始化業(yè)務會被多次執(zhí)行,這是沒有必要的而且多次初始化容易引起問題胀茵,所以需根據(jù)不同進程初始化相應的業(yè)務社露。
獲取進程名稱的方法
public static String getCurProcessName(Context context) {
int pid = android.os.Process.myPid();
ActivityManager mActivityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess : mActivityManager
.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
return appProcess.processName;
}
}
return null;
}
public static String getProcessName() {
try {
File file = new File("/proc/" + android.os.Process.myPid() + "/" + "cmdline");
BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
String processName = mBufferedReader.readLine().trim();
mBufferedReader.close();
return processName;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
兩種方法都行,第一種主流方法琼娘,第二種效率較高峭弟。
以上是一些總結記錄,供參考學習脱拼。