为什么 App 启动延迟 40 秒?

why App is Starting with 40 seconds of delay?

在我的 SplashActivity 中我使用了 retrofiteventbus .

我必须等待开始改造请求或者可能开始 APP 至少 40 秒

之前只是显示一个白页。

每一秒我都会得到两个这样的日志系列:

01-04 09:36:08.104 5217-5217/? W/dex2oat: Unexpected CPU variant for X86 using defaults: x86
01-04 09:36:08.104 5217-5217/? W/dex2oat: Mismatch between dex2oat instruction set features (ISA: X86 Feature string: smp,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt) and those of dex2oat executable (ISA: X86 Feature string: smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt) for the command line:
01-04 09:36:08.104 5217-5217/? W/dex2oat: /system/bin/dex2oat --runtime-arg -classpath --runtime-arg & --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/data/com.idek_2.titrefarsi/files/instant-run/dex/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --oat-fd=35 --oat-location=/data/user/0/com.idek_2.titrefarsi/cache/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --compiler-filter=speed
01-04 09:36:08.106 5217-5217/? I/dex2oat: /system/bin/dex2oat --debuggable --dex-file=/data/data/com.idek_2.titrefarsi/files/instant-run/dex/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --oat-fd=35 --oat-location=/data/user/0/com.idek_2.titrefarsi/cache/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --compiler-filter=speed
01-04 09:36:08.618 5217-5217/? I/dex2oat: dex2oat took 514.000ms (threads: 2) arena alloc=259KB (266112B) java alloc=86KB (88464B) native alloc=830KB (850408B) free=1729KB (1771032B)

我该怎么办?

谢谢。

禁用即时 运行,并从文件 -> 设置

禁用即时部署 运行

特别是 Mismatch between dex2oat instruction set features 警告 - 可能 导致延迟,可能是由于配置了 运行ning 模拟器运行 与 ABI(例如 x86,x86_64)相关的 APK 中没有原生库。

例如,模拟器可能 运行 与 x86_64 CPU/ABI 并用,而 APK 仅包含 x86 和(也许) armeabi-v7a.

使用 Android Studio 可以轻松检查模拟器的 ABI:

(这里的模拟器是x86).

使用 Android Studio 也可以轻松检查包含哪些本机库的风格。通过在项目文件树视图中双击打开 APK 文件,或从外部拖放它。然后,展开内容树的 'lib' 部分:

(在这里您可以看到所有常见的 ABI 都已包括在内,即 x86_64x86armeabi-v7a)。

因此,为了尝试解决此类问题(这对我有用),您可以尝试重新创建正确的 AVD,或者重新访问您应用的 splits 配置。这是标准的单一口味 APK 的典型配置:

android {
    // ...

    splits {
        abi {
            reset()
            enable false
            universalApk false
            include 'armeabi-v7a', 'x86', 'x86_64'
        }
    }
}

您可以在 include 部分下控制这方面的 APK 内容。但是请注意,如果不拆分 APK,其整体大小会增加。

如果你有更复杂的APK拆分配置,你仍然可以得到这个结果,但最好先参考official documentation