" />

Android

用xposed会不会让手机变卡?

很多人用了xposed后都说自己的手机变的卡了,甚至还掉帧。那么xposed 到底会不会影响手机性能?

这个答案当然是显而易见的:会。先说一下xposed的原理,借用一下neoFelhz大佬的话来说就是:Xposed 的工作原理是通过替换或劫持 /system/bin/app_process 控制 zygote(而 zygote 孵化了所有应用的进程,可以形象地称之为“进程之母”),使 app_process 在启动过程中加载 Xposed 的重要部分 XposedBridge.jar,这一段 Java 包含了所有的劫持方法,从而完成对 Zygote 进程及其创建的 Dalvik 虚拟机 的劫持,Xposed 在开机的时候利用 XposedBridge.jar 完成在原 Function 执行的前后加上自定义代码的操作,从而完成所有的 Hook Functions。

在 Android L 时,Xposed 是通过劫持 app_process 来达到 hook 的目的。到了 Android M,谷歌再一次加强了系统安全性,加强了对系统底层(主要是框架 framework)的封装。所以为了实现 hook,就不得不修改 ART(Android Run Time,Android 虚拟机执行进程的方式),从而对 app_process 提供接口。这就是为什么当时 Android L 和 M 的 Xposed 憋了老久才放出来的原因。当然Android N 的 Xposed 迟迟不出来原因主要是系统安全性的增强和由于系统分区加固而可能需要另辟蹊径 Systemless 的缘故。

然而在没有用到 Xposed 的地方,原来怎么运行的程序依然按原来的方式运行。Xposed 只有在应用启动时会根据钩子执行一些替换工作。这部分执行得是非常快的,所以你是不会意识到应用启动速度的差别的,而且这部分占用的内存是很少的。这就是为什么一些改动需要重启才能生效的原因了。所以说,单纯刷入 Xposed,是并不会引起系统卡顿的。

那么为什么 Xposed 会使用户觉得卡顿了呢?当 hook 没有启用时,系统是几乎无影响的。但是你一旦安装了模块以后,hook 开始发挥作用,然后开始替换系统资源为模块自己的代码(排除流氓终结者、核心破解、XPrivacy 这类仅仅篡改了返回值的模块),比如重力工具箱要 hook 系统 Framework 和 SystemUI 的资源。而且,重力工具箱要修改的地方要更底层一些,这样才能实现不重启实时完成切换切换并生效(XnubiaUI 模块,相当于 nubiaUI 上的重力工具箱,也是对 nubiaUI 的功能、界面进行调整的 Xposed 模块,它就没有做实时生效)。在这样的设计中,相当于一次要启用大量钩子随时调用,那么在 UI 层面就有大量改动需要用到钩子。于是在这些调用中,执行速度受到了一些影响。

所以 Xposed 框架会不会让你手机变卡,Xposed 带来的系统卡顿固然不可忽略,但是一般人感觉不会太明显的。关键是否影响卡顿取决于模块本身,越需要经常 hook 替换资源的模块、需要替换大量资源的模块、hook 越接近系统底层的模块,最容易拖慢运行速度。虽然启用模块有性能损失,但是开发模块的程序猿单从写一个Xposed插件的调试成本来看,改一句代码不仅要重新run一遍,还要重启一遍手机,代码大多也算超高品质了,相比某些国产app里面的大量(垃圾)代码来说,各种毒瘤滥用广播,拿一个模块去镇压国产毒瘤,Xposed造成的性能损失真的损失了吗?

最后感谢neoFelhz大佬的博客:为什么安装 Xposed 以后会导致卡顿

(1)

本文由 易新网 作者:Million_Force_S 发表,转载请注明来源!

热评文章

发表评论