Android適配低記憶體

2021-06-27 09:45:49 字數 2309 閱讀 1439

android現在支援512mb記憶體的裝置。該文件的旨在指導oems廠商優化和配置android4.4上的低記憶體裝置。

5.2.1 改善記憶體管理

已驗證過的省記憶體核心配置:kernel same-page merging(ksm)和交換到zram

殺掉哪些無法再快取或已快取過大的程序

禁止開銷大的服務嵌入到android服務,所以不會導致luncher被殺掉

殺掉哪些長期空轉的程序,儘管是一般不可殺的當前ime

系列化launch的後台服務

微調低配裝置的記憶體使用:加大oom的調整級別,更小的圖形快取,等

5.2.2 精簡系統記憶體

裁剪系統服務和系統ui程序,可節省幾mbs

往dalvik中預載dex cache

關掉jit-off選項

減少每個程序前端cache開銷

在framework中引進arraymap/arrayset替代hashmap/hashset

5.2.3 procstats

增加乙個新的開發選項,用來顯示記憶體狀態和應用程式記憶體使用

5.2.4 api

增加activitymanage.islowramdevice(),以便應用程式子啊執行時能檢測系統記憶體規格,並決定是否選擇low-memory功能

5.2.5 memory tracking

新的記憶體追蹤hal,用來追蹤graphics記憶體分配,在dumpsys meminfo中增加額外的資訊,顯示meminfo的概貌

5.3.1 開啟low ram device標誌

product_property_overrides += ro.config.lowram=true

5.3.2 關掉jit特性

product_property_overrides += dalvik.vm.jit.codecachesize=0

5.3.3 launcher 配置

不支援動態桌布

5.4.1 調節kernel/activitymanager,減少記憶體直接**

當乙個程序或核心嘗試分配一頁記憶體(直接或者在產生新的page fault),但核心已用光所有可用的記憶體時,記憶體直接**將被觸發。

當釋放頁時,核心需要阻塞分配記憶體。接著輪流請求磁碟i/o協會髒的page,或者等待lowmemorykiller去殺掉一些程序,這將為每個執行緒帶來額外的i/o開銷。

核心有觸發kswapd或者後台**的watermarks,這些執行緒將周期性地**記憶體。觸發後台記憶體**的預設閾值相當低,2gb的裝置為2mb,512mb的裝置配置為636kb。

核心在後台**通常僅僅**幾mb記憶體,這意味著程序只要申請超過幾m記憶體,那麼很快就會被直接**。

這次公升級提供補丁去配置一些預留的記憶體,如:/proc/sys/vm/extra_freekbytes

5.4.2 調整lowmemorykiller

activitymanager設定lowmemorykiller的閾值,以調整每個程序執行時的快取大小

5.4.3 ksm(kernel samepage merging)

ksm是乙個執行在後台的執行緒,用來比較記憶體中哪些頁在上層程式執行時被標記為madv_merageable;如果發現兩個page相同,ksm執行緒就會把它們合併到乙個寫時拷貝的頁中。ksm可以為系統節省記憶體,但同時因為記憶體拷貝操作,而帶來更大功耗。

開啟核心選項:config_ksm

上層配置藉口:

write /sys/kernel/mm/ksm/pagestoscan 100

write /sys/kernel/mm/ksm/sleepmillisecs 500

write /sys/kernel/mm/ksm/run 1

5.4.4 swap to zram

zram通過壓縮記憶體頁並放於動態記憶體來增加系統可用記憶體。但是,它會帶來cpu開銷。

核心選項:config_swap

config_cgroup_mem_res_ctlr

config_cgroup_mem_res_ctlr_swap

config_zram

5.4.5 carveouts,ion 和 contiguous memory allocation(cma)

低記憶體的裝置重視carveouts是很重要的,特別是還沒被充分利用的情況下,如用於secure video 回播。這裡有幾種針對依賴於硬體額外設計的carveouts region的優化方案:

如果硬體允許不連續的記憶體分配,ion heap允許從系統記憶體分配記憶體,以減少對carveouts的使用;

如果memory regions必須是連續的或限制在特定位址方位時,可以用cma

Android適配之版本適配

windowmanager.layoutparams lp getwindow getattributes lp.layoutindisplaycutoutmode windowmanager.layoutparams.layout in display cutout mode default ge...

android螢幕適配

1 配置android應用程式適配在不同的手機上,需要在androidmanifest.xml檔案的manifest標籤中新增子元素 1 2 3 4 5 6 7 8 9 10 manifestxmlns android supports screens android smallscreens tr...

Android螢幕適配

在sdk中的幫助文件中。develpe training best practices supporting multiple screens 這裡有多屏適配的介紹。現做簡單記錄。screen size small 至少 426dp x 320dp normal 至少 470dp x 320dp l...