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 секунды связано с накладными расходами на удаление старой и установку новой сборки приложения.