Android 多進(jìn)程資料總結(jié)
溫故而知新
網(wǎng)上說多進(jìn)程的文章很多,不過基本都是在討論很深的東西,這是需要去專研的,而我是來這篇是用來偷懶的(應(yīng)用層次),記錄的都是自己對多進(jìn)程的理解,方便以后用到的時(shí)候來偷懶,如果有錯(cuò),請指教,小小程序員萬分感謝。
講進(jìn)程,先來回答下面幾個(gè)問題:
1.什么是線程?
線程就是程序中單獨(dú)執(zhí)行的流控制。
2.什么是多線程?
多線程就是單個(gè)程序中執(zhí)行多個(gè)流控制。作用就是最大限度的使用CPU資源。
3.什么是進(jìn)程?
一般指的是一個(gè)執(zhí)行單元,即一個(gè)應(yīng)用程序(Android中就是一個(gè)應(yīng)用)。
4.線程和進(jìn)程的關(guān)系?
一個(gè)進(jìn)程可以有多個(gè)線程,進(jìn)程與線程是包含與被包含的關(guān)系。
5.為什么要用多進(jìn)程?
1.單進(jìn)程所分配的內(nèi)存不夠,需要更多的內(nèi)存。
2.需要運(yùn)行一個(gè)獨(dú)立的組件。
3.干一些不可見人的勾當(dāng),比如(
A-> 心跳 ->B,如果B沒啟動,就啟動B。
B-> 心跳 ->A,如果A沒啟動,就啟動A。
簡單說就是雙守護(hù)進(jìn)程來防止被用戶殺掉。)
6.怎么開啟多進(jìn)程?
AndroidManifest.xml中設(shè)置android:process=":remote"
<service android:name=".remoteService" android:label="@string/app_name" android:process=":remote"/>
Activity中啟動這個(gè)服務(wù)
Intent mIntent = new Intent(this, remoteService.class); startService(mIntent);
7.":remote"中,冒號是個(gè)什么鬼?
它不是鬼,android:process表示這個(gè)組件跑在什么鬼進(jìn)程里,就是進(jìn)程名。用:的意思是表示這是這個(gè)進(jìn)程對于啟動它的應(yīng)用來說是私有的。類似于我們注冊Activity省略包名一樣。如果我們的包名是com.example.whitelaning,那這個(gè) android:process=":remote"的進(jìn)程的名字就是"com.example.whitelaning:remote"。
8.私有進(jìn)程和全局進(jìn)程有什么區(qū)別?
我也想知道%>_<%有人知道請指教
夜雨寄北大大回復(fù)是,e帶:的表示是當(dāng)前應(yīng)用的私有進(jìn)程,其他應(yīng)用的組件不可以跟它跑在同一個(gè)進(jìn)程里面,而對于全局進(jìn)程,其他應(yīng)用可以通過shareUID來跟它處于同一個(gè)進(jìn)程里面具有相同Uid的應(yīng)用可以共享數(shù)據(jù),可以互相訪問對方的私有數(shù)據(jù)(主席的書在多進(jìn)程那一節(jié)里面有講解)
9.多進(jìn)程有什么要注意的?
1.每次開啟多進(jìn)程,Application都會重新執(zhí)行一遍,所以如果你在Application做了很多初始化的工作,那就需要判斷是哪個(gè)進(jìn)程啟動的Application了。
方法:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); int pid = android.os.Process.myPid(); String processNameString = ""; ActivityManager mActivityManager = (ActivityManager)this.getSystemService(getApplicationContext().ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo appProcess : mActivityManager.getRunningAppProcesses()) { if (appProcess.pid == pid) { processNameString = appProcess.processName; } } if("com.example.whitelaning".equals(processNameString)){ //do Something } else { //do Something } } }
2.多進(jìn)程會使單例模式失效,因?yàn)閮蓚€(gè)線程的內(nèi)存是隔離的。
10.還有什么要知道的?
去看源碼吧,你會死去活來的,如果看完還沒死,請告訴我私有進(jìn)程和全局進(jìn)程的區(qū)別吧,我會獻(xiàn)上我一年份的膝蓋的~
通過此文希望能對Android多線程的資料掌握,謝謝大家對本站的支持!
- Android應(yīng)用開發(fā)SharedPreferences存儲數(shù)據(jù)的使用方法
- Android 動畫之TranslateAnimation應(yīng)用詳解
- Android 動畫之ScaleAnimation應(yīng)用詳解
- Android開發(fā)中多進(jìn)程共享數(shù)據(jù)簡析
- Android 進(jìn)程間通信實(shí)現(xiàn)原理分析
- Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service
- Android編程防止進(jìn)程被第三方軟件殺死的方法
- 解析后臺進(jìn)程對Android性能影響的詳解
- Android結(jié)束進(jìn)程的方法詳解
- Android中應(yīng)用多進(jìn)程的整理總結(jié)
相關(guān)文章
Android ItemDecoration 實(shí)現(xiàn)分組索引列表的示例代碼
本篇文章主要介紹了Android ItemDecoration 實(shí)現(xiàn)分組索引列表的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-10-10Android實(shí)現(xiàn)清除單個(gè)域名的cookie
這篇文章主要介紹了Android實(shí)現(xiàn)清除單個(gè)域名的cookie,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android MVVM架構(gòu)實(shí)現(xiàn)RecyclerView列表詳解流程
MVVM是Model-View-ViewModel的簡寫。它本質(zhì)上就是MVC 的改進(jìn)版。MVVM 就是將其中的View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開2021-10-10Android實(shí)現(xiàn)360手機(jī)助手底部的動畫菜單
這篇文章給大家分享了利用Android實(shí)現(xiàn)360手機(jī)助手底部的動畫菜單效果,文中給出了實(shí)例代碼,這樣對大家的學(xué)習(xí)或者理解更有幫助,有需要的朋友們下面來一起看看吧。2016-10-10Android開發(fā)實(shí)現(xiàn)的內(nèi)存管理工具類
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)的內(nèi)存管理工具類,可實(shí)現(xiàn)計(jì)算手機(jī)內(nèi)部與外部的總存儲空間、可用存儲空間等功能,需要的朋友可以參考下2017-11-11通過OpenGL ES混合模式縮放視頻緩沖區(qū)來適應(yīng)顯示尺寸
當(dāng)開發(fā)基于軟件模式的游戲時(shí),通過縮放視頻緩沖區(qū)來適應(yīng)顯示尺寸是最棘手的問題之一;作為開發(fā)人員,我們必須嘗試在性能與顯示質(zhì)量之間找到最佳平衡點(diǎn)2012-12-12