Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Долгий запуск android приложения

#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 сек, и запустив приложение.

Комментариев нет:

Отправить комментарий