Android应用程序启动时间太慢检查:JNI
根据Android应用程序启动时间太慢检查:JNI,android,performance,java-native-interface,startup,Android,Performance,Java Native Interface,Startup,根据ActivityManager我的android应用程序的启动时间约为3.6秒: I/ActivityManager: Displayed app.com.app/.Activity.MainActivity: +3s653ms 我承认我的应用程序可能没有完全优化,因为根布局层次结构和碎片在启动时膨胀,但我不认为代码优化会让我赢2秒,我已经根据需要尽可能多地缩短代码 然后,在logcat中,我发现一些与检查有关的问题:启动时的JNI。 从我的应用程序中,JNI的设置非常长: 2020-04
ActivityManager
我的android应用程序的启动时间约为3.6秒:
I/ActivityManager: Displayed app.com.app/.Activity.MainActivity: +3s653ms
我承认我的应用程序可能没有完全优化,因为根布局层次结构和碎片在启动时膨胀,但我不认为代码优化会让我赢2秒,我已经根据需要尽可能多地缩短代码
然后,在logcat中,我发现一些与检查有关的问题:启动时的JNI。
从我的应用程序中,JNI的设置非常长:
2020-04-12 22:14:04.324 12724-12724/? I/.com.socialtec: Late-enabling -Xcheck:jni
2020-04-12 22:14:04.376 12724-12724/? I/.com.socialtec: report jit thread pid = 12730
2020-04-12 22:14:05.848 12724-12757/socialtech.com.socialtech W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
2020-04-12 22:14:05.890 12724-12759/socialtech.com.socialtech W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
JNI从4.3秒开始,到5.8秒结束,所以大约需要执行1.5秒
为了确保问题不是代码优化或视图膨胀,我从我的main活动中注释了所有onCreate()
,以便清空它。没有任何呼叫,应用程序是空的,在2.5秒后启动,但JNI仍然在1.5秒左右
2.5-1.5=1s,这是我的空应用程序的持续时间
所以我假设JNI的运行时间取决于应用程序,但即使应用程序中没有运行代码,它怎么能运行这么长时间呢
JNI到底依赖于什么?有没有办法缩短它的运行速度来加速我的创业
我可以在应用程序中关闭它吗
我希望我的应用程序总启动时间大约为+/-2s,延迟启用-Xcheck:jni
是调试版本的默认设置,请参见
由于JIT编译/调试(否则,您无法设置任何与人类可读的源代码匹配的断点,而只能设置JVM字节代码),调试版本的运行速度通常明显低于完全优化的发布版本。买一台高端电脑(或智能手机,或两者兼而有之)可能会稍微加快速度;这也将提高Gradle和emulator的性能。坦率地说,你会得到你所付出的
仍然可以禁用
debug.checkjni
和adb
:
adb shell setprop debug.checkjni 0
或者在模块的build.gradle
中禁用JNI调试:
android {
buildTypes {
debug {
jniDebuggable false
}
}
}