在Android中,一個(gè)Process 只能使用16M內(nèi)存,如果超過(guò)了這個(gè)限制就會(huì)拋出Android Out Of Memory(OOM) 這個(gè)異常。
成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),臨洮網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:臨洮等地區(qū)。臨洮做網(wǎng)站價(jià)格咨詢(xún):028-86922220
為了避免應(yīng)用濫用內(nèi)存,Android 系統(tǒng)會(huì)限制應(yīng)用可以申請(qǐng)的最大堆內(nèi)存,超過(guò)此限制就會(huì)拋出 OOM 異常。
android內(nèi)存不夠了,會(huì)觸發(fā)oom機(jī)制,lowMemoryKiller會(huì)根據(jù)每個(gè)進(jìn)程的oom_adj的等級(jí),依次殺死進(jìn)程,釋放內(nèi)存。lom會(huì)根據(jù)free的內(nèi)存的值,來(lái)判斷kill掉哪個(gè)等級(jí)下的進(jìn)程。例如當(dāng)空閑內(nèi)存只有64M了。
當(dāng)系統(tǒng)進(jìn)行大量廣播、或內(nèi)存較緊時(shí),進(jìn)程可能很快就被砍掉。此問(wèn)題在開(kāi)機(jī)或FOTA后特別容易發(fā)生。
1、一般是按照CPU的核數(shù)來(lái)定義,例如是4核的,一般一個(gè)fixed線(xiàn)程池定義為4個(gè)線(xiàn)程左右。
2、Android一個(gè)進(jìn)程里面最少包含5個(gè)線(xiàn)程,分別為:下圖是創(chuàng)建的一個(gè)僅有hello World!頁(yè)面的工程,線(xiàn)程包含以下的這些。查看 VMRuntime 的源碼發(fā)現(xiàn) startHeapTaskProcessor()、runHeapTasks()均是native方法。
3、現(xiàn)在的Android手機(jī)一般會(huì)有多個(gè)攝像頭,但根據(jù)其方向可以歸為兩類(lèi): CAMERA_FACING_BACK 和 CAMERA_FACING_FRONT 。在打開(kāi)攝像頭之前,首先需要獲取相機(jī)資源,判斷相機(jī)個(gè)數(shù) Camera.getNumberOfCameras() 。
4、線(xiàn)程通過(guò)java的標(biāo)準(zhǔn)對(duì)象Thread 創(chuàng)建. Android 提供了很多方便的管理線(xiàn)程的方法:— Looper 在線(xiàn)程中運(yùn)行一個(gè)消息循環(huán); Handler 傳遞一個(gè)消息; HandlerThread 創(chuàng)建一個(gè)帶有消息循環(huán)的線(xiàn)程。
線(xiàn)程池的實(shí)現(xiàn) ThreadPoolExecutor是線(xiàn)程池的真正實(shí)現(xiàn)??匆幌滤闹饕獏?shù):ThreadPoolExecutor執(zhí)行時(shí)大致遵循如下規(guī)則: 線(xiàn)程池的分類(lèi) Java默認(rèn)實(shí)現(xiàn)了4種線(xiàn)程池,它們都是通過(guò)配置ThreadPoolExecutor實(shí)現(xiàn)的。
AsyncTask: 為 UI 線(xiàn)程與工作線(xiàn)程之間進(jìn)行快速的切換提供一種簡(jiǎn)單便捷的機(jī)制。適用于當(dāng)下立即需要啟動(dòng),但是異步執(zhí)行的生命周期短暫的使用場(chǎng)景。
在Android中,線(xiàn)程會(huì)有那么幾種狀態(tài):創(chuàng)建、就緒、運(yùn)行、阻塞、結(jié)束。當(dāng)應(yīng)用程序有組件在運(yùn)行時(shí),UI線(xiàn)程是處于運(yùn)行狀態(tài)的。
第六個(gè)參數(shù)threadFactory為 線(xiàn)程工廠(chǎng) ,當(dāng)線(xiàn)程池需要?jiǎng)?chuàng)建一個(gè)新線(xiàn)程時(shí),使用線(xiàn)程工廠(chǎng)來(lái)給線(xiàn)程池提供一個(gè)線(xiàn)程。
舉個(gè)例子,我們常用的okhttp內(nèi)部也是使用了線(xiàn)程池,它的ThreadPoolExecutor主要是定義在Dispatcher類(lèi)里面。 使用的是CachedThreadPool。
Android6之前串行執(zhí)行任務(wù),6時(shí)候采用線(xiàn)程池里的并行,Android0開(kāi)始又開(kāi)始串行(為了避免并發(fā)錯(cuò)誤),單任可以并行。
.NET框架為每個(gè)進(jìn)程提供了一個(gè)線(xiàn)程池,一個(gè)線(xiàn)程池有若干個(gè)等待操作狀態(tài),當(dāng)一個(gè)等待操作完成時(shí),線(xiàn)程池中的輔助線(xiàn)程會(huì)執(zhí)行回調(diào)函數(shù)。線(xiàn)程池中的線(xiàn)程由系統(tǒng)管理,程序員不需要費(fèi)力于線(xiàn)程管理,可以集中精力處理應(yīng)用程序任務(wù)。
android下與多線(xiàn)程有關(guān)的主要有以下幾個(gè)類(lèi):由于多線(xiàn)程操作目前主要由線(xiàn)程池方式實(shí)現(xiàn),所以只重點(diǎn)關(guān)注Executors 線(xiàn)程池的優(yōu)勢(shì): 線(xiàn)程池的實(shí)現(xiàn) ThreadPoolExecutor是線(xiàn)程池的真正實(shí)現(xiàn)。
分享文章:android幾個(gè)線(xiàn)程 安卓中線(xiàn)程的作用
網(wǎng)站地址:http://aaarwkj.com/article33/dgcseps.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、標(biāo)簽優(yōu)化、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)