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