当前位置: 首页 > 知识库问答 >
问题:

Android应用启动需要很多时间

曹高阳
2023-03-14

我有一个Android应用程序。在启动屏幕的oncreate()方法中,我添加了

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.i(SplashActivity.APP_NAME, "Executing post-delayed code");
        }
    , 100);

因此,我希望在onCreate退出后100ms后执行该代码。

但我可以看到,我的应用程序在onCreate()之后花了3秒时间来执行延迟后的代码(在3秒之后还会出现UI):

08-30 19:00:45.614 4559-4559/com.example.my I/My Example: OnCreate is exited
08-30 19:00:45.621 4559-4683/com.example.my D/OpenGLRenderer:   Use EGL_SWAP_BEHAVIOR_PRESERVED: true
08-30 19:00:45.654 4559-4683/com.example.my I/Adreno: QUALCOMM build                   : 166ada0, Ifd751822f5
                                                            Build Date                       : 01/26/16
                                                            OpenGL ES Shader Compiler Version: XE031.06.00.05
                                                            Local Branch                     : AU12_SBA
                                                            Remote Branch                    : 
                                                            Remote Branch                    : 
                                                            Reconstruct Branch               : 

**08-30 19:00:45.662** 4559-4683/com.example.my I/OpenGLRenderer: Initialized     EGL, version 1.4

**08-30 19:00:48.646** 4559-4559/com.example.my I/My Example: Executing post-delayed code

有人能告诉我为什么一个应用程序可以在onCreate()之后花3秒来执行延迟后的代码和UI开始出现?

请建议我如何优化这一次的技巧?

还有一个问题,Handler.PostDelayed()在显示onStart()/UI之后执行吗?

共有1个答案

苏野
2023-03-14

考虑增加一点较大的超时,因为即使是默认的android studio模板也将超时时间设置为300毫秒。您可以在android全屏应用程序模板中看到注释

/**
 * Some older devices needs a small delay between UI widget updates
 * and a change of the status and navigation bar.
 */
private static final int UI_ANIMATION_DELAY = 300;

另外,很大程度上取决于您的布局,因为Android是在主线程中绘制的,如果您的UI有很多嵌套级别或硬绘制代码,也会降低性能。

 类似资料:
  • 在我的项目中,我使用了需要multidex支持的库。根据我所做的研究,我知道它会导致应用程序启动时的延迟。 我在Gradle中启用了multidex功能。defaultConfig{multiDexEnabled true} 我曾经为kitkat设备获得NoClassDefFound异常,所以我添加了以下内容: 我在manifest中添加了应用程序名为Android:name=“Android.s

  • 我使用javamail通过IMAP协议从exchage帐户读取邮件。这些邮件是纯格式的,内容是XML。 几乎所有这些邮件的大小都很短(通常小于100Kb)。然而,有时我不得不处理大型邮件(大约10Mb-15Mb)。例如,昨天我收到一封13Mb大小的电子邮件。仅仅读它就花了50多分钟。这正常吗?有没有办法提高它的性能?代码是: 花费如此长时间的方法是。我做错了什么?有什么提示吗? 非常感谢,我的英语

  • 问题内容: 我在从2.2-4.1.2测试的所有Android版本中都遇到了这种情况。 这些流的比特率适合移动和3G连接。同一流只需不到一秒钟的时间即可开始在等效的iOS应用中进行缓冲。 有没有一种方法可以指定应该缓冲的时间?我知道Tune In广播应用程序提供此功能(https://play.google.com/store/apps/details?id=tunein.player)。 谢谢。

  • 我正试着从一个广播接收机里启动主activity。我不想提供activity类名,而是使用android的action和category来找出主要的activity。 好像不起作用。 发送代码: 我得到这个错误: 已导致BT:Android.Content.ActivityNotFoundException:未找到处理意图的activity{act=Android.Intent.Action.Ma

  • 问题内容: 我有一个听TIME_SET动作android的接收器。 但有时会在不改变时间的情况下采取有意图的行动(随机问题) 请帮助我解决这个问题 提前致谢。码 问题答案: 我也有同样的问题。看来,如果您的设备已选中“使用网络提供的时间”,则该设备将定期更新时间。似乎即使更新了时间(即使是最小的时间校正),也会发生TIME_SET广播…我希望可以检查/使用一些阈值参数,以便广播这些次要的时间校正,

  • 给出结果需要20多秒,而在mongo控制台中同样的查询需要不到一秒。 为什么会出现这种情况,如何减少速度差距?