Android - 记录启动延迟的问题

标签 android adb android-4.4-kitkat nexus-5

我正在尝试记录我的应用的启动延迟。我这样做的方法是在 Application.onCreate 上设置应用程序的开始时间,并提供一个返回时间的公共(public)方法。

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 秒,但记录的延迟超出了图表。

有人知道为什么会这样吗?

更新

因此,如果我使用“adb install -r myapk”安装 apk,应用程序不会通过 Myapplication.onCreate()

最佳答案

我建议使用 TimingLogger类(class)。根据文档,您可以轻松跟踪耗时,甚至可以在流程中添加拆分。

这个

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

关于Android - 记录启动延迟的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29528813/

相关文章:

android - 为什么需要未对齐的 apk?

android - Android Compose 中的位置警报对话框

android - 溢出菜单单击禁用沉浸模式 - Android 4.4 Kitkat

android - W AppOps : Noting op not finished: pkg com. google.android.gms

android - 获取 Activity 经理的状态

android - 检查应用程序是否在后台

android - 放大 KitKat WebView 后不再有文本重排

android - 在 Android 谷歌地图 v2 上保存标记

Android:状态栏通知的点击事件

android - 如何通过 TCP 使用 ADB 连接到 Android?