为什么App会以40秒的延迟开始?

时间:2017-01-04 06:36:54

标签: android delay android-cardview mismatch dex2oat

SplashActivity我使用了retrofiteventbus

我必须等待启动改装请求或者至少 40秒

启动APP

之前只是显示白页。

每一秒我得到两个这样的Log系列:

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)

我该怎么办?

感谢。

2 个答案:

答案 0 :(得分:1)

禁用即时运行,并在文件中禁用即时运行中的部署 - >设置

答案 1 :(得分:0)

尤其是Mismatch between dex2oat instruction set features警告-可能会引起延迟,这可能是由于正在运行的仿真器已配置为以ABI运行(例如x86,x86_64),其本地库在关联的APK中不可用。

例如,仿真器可能正在运行x86_64 CPU / ABI,而APK仅包含x86和(也许)armeabi-v7a的本地库。

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

AVD's dialog in Android Studio

(此处的仿真器为x86)。

使用Android Studio还可轻松检查包含哪些本机库的样式。在“项目”文件树视图中双击以打开APK文件,或从外部将其拖放。然后,展开内容树的“ lib”部分:

APK content: 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