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(),

3 ответа

Решение

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

Я предлагаю использовать 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

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

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

Другие вопросы по тегам