Android 从 Marshmallow 升级到 Nougat 后方法性能突然变慢

Android method performance suddnely slow after upgrade from Marshmallow to Nougat

我一直在开发一款游戏,使用 Samsung Galaxy S6 运行 Marshmallow 作为我的开发设备之一。在 phone 升级到 Nougat 后,一个平均需要 6ms 执行的方法突然需要 40-70 ms。我代码中的其他方法也受到类似的影响——代码似乎全面变慢了。

运行 Yifang 平板电脑上的同一构建(调试构建)运行 Marshmallow(来自沃尔玛的清仓封盖)仍然以大约 8 毫秒的速度运行该方法。 Systrace 似乎没有显示任何问题,除了我的代码的线程很长一段时间只是 运行。在分析器下,该方法在两种环境下的运行时间约为 200 毫秒,在 Marshmallow 下的三星手机上也是如此。唯一的区别是 java.util.Random.next() 中的 AtomicLong.compareAndSwap() 似乎需要更长的时间(可能会阻塞)并且 ArrayList.ensureExlicitCapacity()/ArrayList.grow() 似乎也需要更长的时间.

该应用程序有一个 UIThread,第二个线程,我在其中完成我的所有工作,还有几个 Android 添加的 Binder 线程。

我不是很想找任何人来解决我的性能问题,只是想知道自从升级到牛轧糖后是否还有其他人遇到过同样的问题,以及我可以使用哪些其他工具来尝试找到问题?

在 Android Nougat 下,ART 现在 运行s JIT 优化在执行时而非安装时进行。虽然我确定它可以加快安装和软件更新速度,但第一次通过代码中的路径(有时是随后通过该路径的行程)在性能上付出了很大的代价。

幸运的是,有一种方法可以通过 adb 命令 运行 对应用程序进行 JIT 优化:

adb shell cmd package compile -m speed -f package-name

这个命令的描述更详细一些here

运行执行此命令后,性能符合我对设备的预期。