@
katoyu @
Rhianu @
geeksammao @
CastleBUPT 我作为一个 iOS 开发者说一说吧,微信确认是调用了私有的 api ,不过这种 api 很多应用在调用,就是参数传递的时候传了一个没公开的值进去,就是拦截链接跳转应用那个功能。其它的私有 api 不确定。
耗电的原因是微信的网络全接管了,所有的网络请求都走的是微信自己的网络框架,性能怎么可能比的过系统的?
微信内建了一个服务器,而且会分析外部网页的内容并把链接进行替换加上代理,这里面有没有将所有内容都上传到后台进行监控我就不清楚了,反正用户用 http(s)工具抓包是抓不到什么数据的。
然后根据微信的内部开发人员(负责腾讯整个视频传输相关模块的高级工程师)说,22 年上半年微信网络框架进行了一次重构,但是他们内部人员都不看好这次重构,并且还有不少 BUG 挂起在那没有修复(玄学 BUG)。
2020 年的时候经常出现玄学发烫问题,现在用微信发烫基本没遇到了。可能 BUG 少了一些了吧。
还有就是之前微信被频繁杀后台,根据系统的日志分析,微信频繁切换线程,线程切换是很消耗 cpu 性能的。
小程序:苹果的 webkit 是一个独立的进程运行,也就是说系统只要启动了,那么所有的网页都会在那个独立的进程里面进行解析,然而微信小程序就是一个类似 webkit 的框架,但 iOS 应用限制,一个应用就是一个独立的进程,所以小程序和微信主体跑在一个进程里面,于是就得多开线程,线程通信比进程通信更消耗性能。
监控:微信肯定有监控用户日常使用的,整个网络框架都被接管了,这监控是分分钟的事情。主要是网络监控,像麦克风定位相机这些静默监控做不到的。
还有一个就是微信的提前加载,有没有注意到一个现象,打开微信的时候微信消息列表会加载一下,然后点击具体的消息进去就很快,微信在打开的时候就把数据读取解析到内存里面了,而且微信每次刚打开一段时间很流畅,但是用久了就卡,这是它内存一直没释放,比如朋友圈,你滑动到下面返回,再进去还是你上次的位置,我特意研究过微信的内存变化,在点击进入朋友圈以及小程序的时候内存会突然暴涨,但返回之后内存并没变化,根本就没释放。
所以,微信耗电的元凶就在于网络和内存一直占用没释放,虽然每次使用再申请内存会慢点,但不用的时候还不释放这就造成了杀掉其它 app 进程了,不会真后台运行,但那只是 cpu 暂停,内存还在,也就是说微信到后台之后它的内存不会释放,除非运行其它 app 内存不够被干掉,然后结合苹果那个堆管理的为了给微信留的那个变量,感觉那个变量就是标记微信运行状态的,对于后台应用释放内存是有优先级的,在后台的时候先释放其它应用,微信最后释放。