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...