Android Slow Cold Start Times - PullRequest
       52

Android Slow Cold Start Times

0 голосов
/ 13 февраля 2019

У меня очень странная проблема, и мне нужна помощь в решении.Это связано с длительным временем холодного запуска.Это означает, что моему приложению требуется много времени для запуска и отображения в первый раз.Я посмотрел на устранение неполадок, учитывая материал, приведенный здесь:

https://developer.android.com/topic/performance/vitals/launch-time

Все очень полезно, но я попробовал что-то другое.Когда наша система находится под большой нагрузкой, это когда я вижу проблемы времени запуска.Я пытался разделить всю деятельность на только запуск, без рисования / раздувания взглядов, как никогда.Буквально только запуск базовой активности.Я вижу время холодного старта в среднем 1,45 с.Вы можете подумать, что это нормально, но у нас есть другие приложения, которые имеют полную реализацию и фактическое наполнение представлений / виджетов, данных и т. Д., Для запуска которых требуется всего 1,17 с.Это очень смущает меня, так как у меня буквально только активность (та же самая тема android).Какие еще вещи я должен искать?Почему это займет так много времени, чтобы начать?

Обратите внимание, что действие, с которым я сравниваю его, построено с использованием Gradle, а я использую Maven.Наши манифесты для Android одинаковы с точки зрения использования атрибутов.

Я также пытался запустить процесс уже перед запуском действия (создал фиктивный сервис при загрузке), но реального времени запуска не было.Я нахожусь на Android 4.3.1 и подтверждаю время запуска, просматривая запись ActivityManager в logcat.Может быть, проблема с загрузкой ресурса?Это должно быть что-то со сборкой, так как нет причины, по которой для запуска простой операции требуется больше времени, чем для более сложной.

РЕДАКТИРОВАТЬ: добавление кода

Вот манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="11" android:versionName="debug-11" package="com.my.app">

    <uses-permission android:name="com.cnh.android.permission.ACCESS_SETTINGS"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.VIBRATE"/>

    <!-- uses-sdk is updated automatically by pom.xml -->
    <uses-sdk android:minSdkVersion="18" android:targetSdkVersion="18"/>


    <application android:allowBackup="true" android:debuggable="false" android:icon="@drawable/ic_tab" android:label="@string/app_name" android:name=".App" android:theme="@style/AppTheme">
        <activity android:label="@string/app_name" android:launchMode="singleInstance" android:name=".MyActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Код приложения:

package com.my.app;

import android.app.Application;
import android.content.Context;

/**
 * base App class used for application
 */
public class App extends Application {

   private static Context context;

   @Override
   public void onCreate() {
      super.onCreate();
      setContext(this);
   }

   private static void setContext(Context ctx) {
      context = ctx;
   }

   public static Context getContext() {
      return context;
   }
}

Код активности:

package com.my.app;

import android.app.Activity;
import android.os.Bundle;

public class MyActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
   }

   @Override
   protected void onStart() {
      super.onStart();
   }

   @Override
   protected void onResume() {
      super.onResume();
   }

   @Override
   protected void onPause() {
      super.onPause();
   }

   @Override
   protected void onStop() {
      super.onStop();
   }

   @Override
   protected void onDestroy() {
      super.onDestroy();
   }
}

Как я уже сказал, супер базовый / скелет.

...