【问题标题】:Delay between app process start and Application onCreate应用进程启动和应用程序 onCreate 之间的延迟
【发布时间】:2023-02-02 16:00:32
【问题描述】:

我正在开发一个具有大型代码库的应用程序。 问题是当我从冷启动状态启动应用程序时,显示应用程序的第一个屏幕需要很多时间。
基于here我检查了TTID对于应用程序来说,这很可怕:

Displayed com.example.myapp/.ui.MainActivity: +6s501ms

所以我放了一些日志来检查问题出在哪里:

class MyApp : Application() {
    override fun onCreate() {
        Log.d("Performance", "MyApp::onCreate::start")
        super.onCreate()
        // App initializations
        Log.d("Performance", "MyApp::onCreate::end")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("Performance", "MainActivity::onCreate::start")
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // Ui initializations
        Log.d("Performance", "MainActivity::onCreate::end")
    }
}

在此之后我意识到了一些奇怪的事情:

---------------------------- PROCESS STARTED (4572) for package com.example.myapp ----------------------------
13:58:06.819 Performance    D  MyApp::onCreate::start
13:58:07.066 Performance    D  MyApp::onCreate::end
13:58:07.132 Performance    D  MainActivity::onCreate::start
13:58:07.566 Performance    D  MainActivity::onCreate::end

我注意到一件奇怪的事。 PROCESS_STARTApp:onCreate 之间有很多延迟(大约 5 秒)(PROCESS_START 没有任何时间戳,但我手动计算)。此外,应用程序创建和活动创建不会超过1个第二。
那么我该如何解决这个问题呢?这个问题的原因是什么?

【问题讨论】:

  • 这是调试版本吗?您是否处于调试模式而不是运行模式?我认为其中任何一个都会导致速度变慢。
  • 您可能有 1 个以上注册ContentObservers 的库,它们在进程启动时起作用。
  • @Tenfour04 是的,此日志属于调试版本,但不处于调试模式。另外我要提到的是,由于发布版本的使用报告,我开始检查性能
  • 如果您有一个定制的 Application 类进行繁重的处理,那可能是一个原因
  • 您添加了赏金,但您是否已查看内容观察器,如上面评论中所述?这可能是罪魁祸首。

标签: android performance kotlin cold-start


【解决方案1】:

该问题可能与您的应用启动所需的时间有关,包括加载代码、初始化组件和准备流程。延迟可能有几个原因:

  1. 代码优化:您的应用程序的代码量可能很大,导致加载时间更长。您可以通过删除未使用的类和库、缩小资源以及使用 ProGuard 来优化您的代码。

  2. 资源加载:您的应用程序可能在启动期间加载了太多资源。您可以通过仅加载所需资源并减小资源大小来优化资源加载。

  3. 依赖注入:您的应用程序可能使用了很多依赖项,导致加载时间变长。您可以通过使用更轻的依赖项注入框架或仅注入所需的依赖项来优化这一点。

  4. 应用程序启动时间还可能受到其他因素的影响,例如设备的性能、可用​​内存和后台进程。

    要解决此问题,您可以尝试以下步骤:

    1. 使用 TraceView 或 Systrace 来监控启动过程并识别缓慢的步骤。

    2. 优化代码,减少资源大小,并最大限度地减少依赖项的数量。

    3. 减少启动时的网络请求次数,使用缓存减少延迟。

    4. 使用 Android Profiler 测量应用程序的内存、CPU 和网络使用情况,并优化影响性能的区域。

    5. 考虑在启动应用程序之前使用应用程序启动前报告来检查性能问题。

      这些步骤应该可以帮助您识别并解决应用程序启动过程中延迟的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2021-12-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多