Подтвердить что ты не робот

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

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

Обновление

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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