Очень долго запускается приложение (в этом примере 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.
Насколько я понимаю, долго происходит первоначальная инициализация, и связана она с загрузкой дополнительных библиотек.
Как можно это ускорить или хотя бы отложить, чтобы показать экран загрузки?
Ответ
Это особенности работы виртуальной машины ART. На самом деле, долгая загрузка кажется долгой изза оптимизации приложения после его установки. То есть, дивайсу нужно время не на запуск приложения, а на его распаковку. Соответственно, пока приложение не распакуется, оно не сможет запуститься. Проверить мою теорию вы можете удалив приложение, установив APK файл, подождав ~40 сек, и запустив приложение.
Комментариев нет:
Отправить комментарий