#java #android #boot
Очень долго запускается приложение (в этом примере 40 секунд) если запуск происходит впервые, потом запускается быстро. Пробовал на простой активности (хотя есть и рабочие): public class SplashActivity extends Activity { private static final String TAG = "SplashActivity"; @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); } @Override public void onStart() { Log.d(TAG, "onStart"); super.onStart(); } @Override public void onResume() { Log.d(TAG, "onResume"); super.onResume(); } } Проект состоит из двух рабочих модулей. Модуль app: dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0' apt "org.androidannotations:androidannotations:$AAVersion" compile "org.androidannotations:androidannotations-api:$AAVersion" testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.github.ParkSangGwon:TedPermission:v1.0.8' compile 'com.vk:androidsdk:1.6.5' compile 'com.fasterxml.jackson.core:jackson-core:2.4.1' compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.1' compile 'com.fasterxml.jackson.core:jackson-databind:2.4.1' compile project(':libw') } Модуль libw: dependencies { compile 'com.google.guava:guava:18.0' compile 'com.android.support:support-v4:22.1.1' compile 'com.google.http-client:google-http-client:1.19.0' compile 'com.google.http-client:google-http-client-android:1.19.0' compile 'com.google.http-client:google-http-client-jackson2:1.19.0' compile 'com.google.oauth-client:google-oauth-client:1.19.0' compile 'com.google.code.gson:gson:2.4' compile 'com.google.code.findbugs:jsr305:3.0.0' compile 'com.google.protobuf:protobuf-java:2.6.1' compile 'com.fasterxml.jackson.core:jackson-core:2.5.0' compile('com.crashlytics.sdk.android:crashlytics:2.5.7@aar') { transitive = true; } compile files('libs/m3u8parser-0.2.jar') jaxDoclet("com.google.doclava:doclava:1.0.5") classpaths fileTree(dir: 'build/classes/release').matching { include 'io/x/sdk/S.java' } } Лог: 07-04 17:18:37.893 31219-31219/com.sapp W/System: ClassLoader referenced unknown path: /data/app/com.sapp-1/lib/arm 07-04 17:19:17.429 31219-31219/com.sapp W/System: ClassLoader referenced unknown path: /data/app/com.sapp-1/lib/arm 07-04 17:19:17.488 31219-31219/com.sapp D/SplashActivity: onCreate 07-04 17:19:17.513 31219-31219/com.sapp D/SplashActivity: onStart 07-04 17:19:17.513 31219-31219/com.sapp D/SplashActivity: onResume 07-04 17:19:17.522 31219-31875/com.sapp D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: false 07-04 17:19:17.539 31219-31219/com.sapp D/SplashActivity: onStart 07-04 17:19:17.539 31219-31219/com.sapp D/SplashActivity: onResume 07-04 17:19:17.558 31219-31875/com.sapp D/libEGL: loaded /system/lib/egl/libEGL_mali.so 07-04 17:19:17.564 31219-31875/com.sapp D/libEGL: loaded /system/lib/egl/libGLESv1_CM_mali.so 07-04 17:19:17.602 31219-31875/com.sapp D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so [ 07-04 17:19:17.641 31219:31875 E/ ] Device driver API match Device driver API version: 29 User space API version: 29 [ 07-04 17:19:17.641 31219:31875 E/ ] mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Tue Jul 22 19:59:34 KST 2014 07-04 17:19:17.642 31219-31875/com.sapp I/OpenGLRenderer: Initialized EGL, version 1.4 В период долгого запуска приложения, в профайлере такая картина: В период долгой загрузки приложения, на устройстве такая ситуация: Это на экране можно видеть до появления в логе onResume, после чего отображается экран загрузки. Тестировал на Api 21, 23. Насколько я понимаю, долго происходит первоначальная инициализация, и связана она с загрузкой дополнительных библиотек. Как можно это ускорить или хотя бы отложить, чтобы показать экран загрузки?
Ответы
Ответ 1
Это особенности работы виртуальной машины ART. На самом деле, долгая загрузка кажется долгой изза оптимизации приложения после его установки. То есть, дивайсу нужно время не на запуск приложения, а на его распаковку. Соответственно, пока приложение не распакуется, оно не сможет запуститься. Проверить мою теорию вы можете удалив приложение, установив APK файл, подождав ~40 сек, и запустив приложение.
Комментариев нет:
Отправить комментарий