名词的解读与定义

白重载

由应用被压缩太严重,进程被杀或者应用没及时进行解冻造成。

表现为:

打开应用,应用页面重新加载


黑重载

相当于冷启动,因为存在程序不完整或者进程丢失,也就是炸binder。

表现为:

应用黑闪一下,出现桌面,然后重新加载页面


闪弹

目前闪弹触发条件不明,我觉得大部分出现于kill上面。

表现为:

应用进入后台之后再次打开,应用在动画没结束的时候就会自动闪退。等再次进入的时候就会发现重新启动了【这种再次重新加载也被成为冷启动】


内存泄漏

1.当你打开软件,然后清掉后台,重复操作,内存占用会一直累加,等到内存耗尽,就会出现卡顿和死机

正常情况下杀死应用后会回收应用占用内存(如QQ占用1.7G内存,杀死QQ及其后台以后系统应能空闲出1.7G左右内存),但是内存泄漏情况下杀死应用后内存不会被回收,导致内存占用越来越多。目前仅freezerv1存在此问题。

表现为:

打开进程查询软件,如果出现2个一样的进程就是内存泄露(非双开应用)

注:

内存泄露会无法释放内存,导致内存满手机卡死,noa3x已经打了内存泄露补丁缓解,但是还是会造成内存泄露

解决方法:

重启手机


掉卡片

表现为:

1.软件进程还在,你去点应用的快捷方式还能打开,但是后台任务卡片掉了

2.长时间不用的app在后台界面,卡片和进程一起丢失

解决方法:

刷入hook了后台防掉卡片的模块,例如后台优化,AppRetention等


冻死

目前出现情况不明,在冻它和noa中我都见过冻死

表现为:

1.滑动页面,点击页面无响应

2.滑动页面,点击页面无响应,重新切一次后台才能显示刚刚滑动,点击的页面,但是继续滑动页面,点击页面还是无响应,需要重新切一次后台才能显示刚刚滑动,点击的页面

解决方法:

杀死应用重新打开一次

注:

把应用从后台切换至前台,其中有一段时间无法滑动屏幕,需要过一段时间才可以滑动屏幕,这不是冻死,而是应用从交换分区交换至RAM中,或者是应用还在解冻中(一般情况下为前者)


卡屏

日前怀疑是binder有问题出现的

表现为:

点击/滑动页面无响应,切后台重新进就正常

卡屏与冻死的区别:

卡屏切换后台重新进就解决,冻死之后,切换后台重新进也只是加载一下页面而已,滑动,点击还是不响应,切一次后台加载一下页面


假断网

出现情况不明
表现为:
重新打开应用,在网络正常的情况下,应用无法连接网络
解决方法:
杀死应用重新打开一次


Binder

1.Binder驱动是系统里负责应用之间通信,传递通信数据的驱动,位于dev/binder。如果应用只是冻结的运行,而没有冻结其binder通信接口,那么在其冻结状态下,如果遇到其他应用发来的通信请求,京就无法及时回复,超时不回复将被安卓框架层认为应用运行异常而杀死。而后应用解冻时,大概率将发生瞬间闪退,重启,重载等等情况(来自冻它官网)

2.常见binder通信路径在/dev/binder如果你刷的第三方内核魔改了binder就会出现路径错乱情,况只有小米原生墓碑才能使用binder_ open外加binder_ Freezer 在冻它对binder使用的是/dev/binder所以如果是5.4内核的就不要刷所谓的完整binder通信的内核除非你用小米的原生墓碑( 来自 @魔威 补充)

3.虽然平时一直只说binder,实际上是两个东西,binder是Android本来就有的,冻结提到的binder实际上是通知墓碑有binder消息,要不要解冻(来自@lztxzr 补充)


Freezer

Freezer是cgroup的其中一个子控制器,用于冻结进程的CPU使用权。


FreezerV1

Freezer1很早便在内核中支持,3.×/4.×/5.×内核都会支持。部分内核的FreezerV1存在缺陷,进程处于冻结状态时无法被杀死,依旧占据内存,类似内存泄漏,需要解冻才能结束进程并释放内存。这是内核级缺陷,应用层大率无法解决,只能积极解冻来缓解

注:某些手机厂商基于V1的墓碑机制(例如Freezerv1版Millet)会捕获杀进程信号及时解冻,这样会及时释放进程的内存。(充电时或者各类按键事件时,Millet也会积极解冻应用


FreezerV2

Freezer2在5.4内核Android11起支持,冻结效果好,且没有V1的类似内存泄漏问题高通平台一般在4.19内核就获得支持,但部分厂商的手机可能默认不会开启,需要使用额外模块手动开启。谷歌Pixel某些机型甚至在4.14内核中也有实现


SIGSTOP

SIGSTOP是Linux中编号19的系统信号,不能被进程捕获,一旦进程收到该信号则被立即强制暂停运行。


解冻方式

Binder 解冻

利用系统间的通讯 binder进行临时解冻

效果最好


轮番解冻

因为没有binder压死之后就需要让app来活一会让他以为自己还活着,轮的意思是轮着解

冻一个app3秒,解冻是最久没打开的那个app

例:

我有5个应用,正常情况下是按顺序解冻的,也就是12345,但这时候我突然打开了3了,这时候顺序就会变成12453。

noactive拥有这种解冻方式,该解冻方式不如binder解冻,只能作为binder解冻的下位品


定时解冻

设置一个解冻时间,时间到了应用全部解冻

冻它拥有这种解冻方式,该解冻方式不如binder解冻,只能作为binder解冻的下位品


单应用定时解冻

给应用绑定一个单独的定时器,时间到了解冻该应用。效果也好,但是会略微增加功耗

仅noactive-2.0拥有这种解冻方式,该解冻方式虽然不如binder解冻,但能与轮番解冻形成互补