Android – проблемы с регистрацией задержки запуска

Я пытаюсь зарегистрировать латентность запуска моего приложения . Как я это делаю, это настройка времени запуска приложения на Application.onCreate и предоставление общедоступного метода, который возвращает время.

 MyApplication extends Application { Date startUpTime; //Declare variables @Override public void onCreate() { super.onCreate(); setStartupTime(); //other initializations } private void setStartUpTime() { startUpTime = new Date(); } public Date getStartUpTime() { return startUpTime; } } MyActivity extends Activity { . . . @Override public void onStart(){ logStartUpLatency(); //other onStart stuff } private void logStartUpLatency() { Date currentTime = new Date(); Date startTime = (MyApplication)getApplicationContext().getStartUpTime(); long latency = currentTime.getTime() - startTIme.getTime(); Log.d("Start up Latency is ", Long.toString(latency)): } 

Вот как я тестирую задержку запуска:

  • Adb установить myapk
  • Запустите приложение, чтобы получить первую задержку запуска. Я могу видеть, что задержка зарегистрирована правильно для первого запуска
  • Снова запустите приложение, чтобы проверить начальную задержку. Записанная латентность верна для начала (или любого числа последующих запусков)
  • Теперь я увеличиваю код версии приложения и его имя на 1. Чтобы имитировать обновление, я использовал команду adb install -r myapk.
  • Теперь я снова запустил приложение, чтобы проверить начальную задержку после обновления, хотя это занимает 3 секунды, задержка задержек отключена от диаграмм.

Кто-нибудь знает, почему это может случиться?

Обновить

Поэтому, если я устанавливаю apk с помощью «adb install -r myapk», приложение не будет проходить через Myapplication.onCreate() .

Solutions Collecting From Web of "Android – проблемы с регистрацией задержки запуска"

Я предлагаю использовать класс TimingLogger . В соответствии с документацией вы можете легко отслеживать прошедшее время и даже добавлять расщепления в процесс.

Эта

 TimingLogger timings = new TimingLogger(TAG, "methodA"); // ... do some work A ... timings.addSplit("work A"); // ... do some work B ... timings.addSplit("work B"); // ... do some work C ... timings.addSplit("work C"); timings.dumpToLog(); 

производит

 D/TAG (3459): methodA: begin D/TAG (3459): methodA: 9 ms, work A D/TAG (3459): methodA: 1 ms, work B D/TAG (3459): methodA: 6 ms, work C D/TAG (3459): methodA: end, 16 ms 

Задержка, которую вы вычисляете, составляет миллисекунды. Дата # getTime () возвращает число миллисекунд с 1 января 1970 года, полночь GMT.

Наблюдаемое время в 3 секунды из-за накладных расходов для удаления старого и установки новой сборки приложения.

Поэтому, если я устанавливаю apk с помощью «adb install -r myapk», приложение не будет проходить через Myapplication.onCreate (). Так что ответит на этот вопрос. Я задам отдельный вопрос о том, зачем устанавливать приложение с помощью «adb install -r myapk», а затем запуск myapk не проходит через MyApplication.onCreate ()