肉呆大魔王
26-06-26 19:21 微博认证:微博VLOG博主 头条文章作者

Android 的原生家庭很严格的,朝廷用钱的地方很多,抗倭、打鞑靼,老道士还得修道观,每个应用有自己固定的可支配内存空间,为了不让你乱花钱,LKM 这个内阁会给每个应用打分(OOM Adj),一旦内存不够用,就按分数从高到低直接 kill 进程。

vivo X Fold 6 是怎么突破这个限制,可以一次在一块大屏幕上跑多个 app 还不会被杀掉的呢?

改稻为桑。

过去 Android 只能管理应用在虚拟机(JVM/ART)里占用的普通内存,但应用在解码视频、渲染图形时申请的 DMA 内存属于底层硬件缓冲区,系统很难管,这就容易导致隐性内存暴涨而触发强杀。vivo 把编解码器的 DMA 内存也记录在案,进行全链路管控,使内存回收速度提升了 15%。这是改稻为桑的第一步[doge]

第二步呢,在 Android 的原生机制里,只有真正处于屏幕最顶层、用户正在触摸的那个 Activity 才是真正的 RESUMED(恢复)状态,其余分屏应用在系统底层经常会被切成 PAUSED(暂停)状态(比如你在打游戏,分屏的视频就会暂停播放)。

vivo 修改了 AMS(Activity Manager Service) 核心服务,让 4 个平铺或悬浮的窗口在系统内核中同时保持 RESUMED 活跃状态。系统专门为这 4 个前台窗口开辟了硬线程分配,无论你手在操作哪一个,另外三个应用的渲染线程和网络线程都以最高优先级运行。

发布于 上海