startup state
- Android 启动状态(startup state)
- 1.1、冷启动(Cold Start)
- 1.2、温启动(Warm Start)
- 1.3、热启动(Hot Start)
- 1.4、后台启动(Background Start)
- 优化(套话)待续
- 参考地址
Android 启动状态(startup state)
1.1、冷启动(Cold Start)
当应用尚未在内存中运行时,用户点击应用图标或通过其他方式启动应用时,会触发冷启动。
在这种情况下,应用需要从头开始加载并初始化,这可能需要一些时间,用户可能会感到启动时间较长。
启动流程:
https://blog.csdn.net/weixin_35691921/article/details/116143407?spm=1001.2014.3001.5501
启动时长:
可以理解为Application.onCreate() 到 Activity.onResume()
或者使用adb命令与性能测试工具
adb shell am start -W -n com.example.package/.MainActivity
1.2、温启动(Warm Start)
温启动介于冷启动和热启动之间。当应用在内存中部分被回收但仍有一些资源保留时,再次启动应用将触发温启动。这种情况下,应用需要重新初始化一些资源,但不需要完全从头开始加载。
温启动有很多场景,例如:
-
用户按连续按返回退出了app,然后重新启动app;
-
由于系统收回了app的内存,然后重新启动app。
-
进程仍然存在而Activity销毁
温启动的场景可以使用:onSaveInstanceState去保存需要的数据状态,在重建的时候可以在onCreate和onRestoreInstanceState中的参数去获取销毁前保存的数据。
Configuration 变换和主题切换也会触发:onSaveInstanceState和onRestoreInstanceState
App运行之后切换横竖屏,通过上面代码实验得到的结果是:
I/com.zj.activitylifecycle.LifeCycleActivity: —> onCreate
I/com.zj.activitylifecycle.LifeCycleActivity: —> onStart
I/com.zj.activitylifecycle.LifeCycleActivity: —> onResume
I/com.zj.activitylifecycle.LifeCycleActivity: —> onPause
I/com.zj.activitylifecycle.LifeCycleActivity: —> onSaveInstanceState
I/com.zj.activitylifecycle.LifeCycleActivity: —> onStop
I/com.zj.activitylifecycle.LifeCycleActivity: —> onDestory
I/com.zj.activitylifecycle.LifeCycleActivity: —> recreate
I/com.zj.activitylifecycle.LifeCycleActivity: —> onStart
I/com.zj.activitylifecycle.LifeCycleActivity: —> onRestoreInstanceState
I/com.zj.activitylifecycle.LifeCycleActivity: —> onResume
————————————————
原文链接:https://blog.csdn.net/mypotatolove/article/details/82217620
1.3、热启动(Hot Start)
重新启动,而不是从完全关闭的状态开始。
当应用已经在内存中运行,但用户在应用中导航到其他界面或按下 Home 按钮后,再次返回应用时,会触发热启动。
热启动相对较快,因为应用的部分状态和资源已经存在于内存中。
1.4、后台启动(Background Start)
后台启动指的是当应用在后台运行,而不在前台显示时触发的启动方式。这可能是由于应用接收到推送通知、执行定时任务或其他后台事件触发的。后台启动通常是对用户不可见的,因为应用不会立即出现在屏幕上。
优化(套话)待续
Android应用的冷启动优化是一个复杂而关键的任务。以下是一些具体的优化策略,帮助你提高Android应用的冷启动性能:
-
使用启动页(Splash Screen): 引入一个启动页,显示应用程序的标志或其他欢迎信息。这不仅可以为用户提供启动反馈,还可以让应用在后台进行一些初始化工作,从而减少用户感知的启动时间。
-
延迟加载: 通过将不是必需立即加载的组件延迟初始化,可以减小应用程序启动时的初始负担。使用懒加载模式,只有在需要时才初始化和加载相关组件。
-
应用程序分割(App Slicing): 使用应用程序分割特性,以便将应用程序的不同部分进行拆分并仅在需要时下载。这有助于减小APK文件的大小,加快应用程序下载和安装的速度。
-
减小APK大小: 优化资源、压缩图片、删除不必要的资源文件和代码,以减小APK的大小。这不仅有助于更快地下载和安装应用程序,还有助于加快应用的启动速度。
-
使用ProGuard进行代码混淆和优化: ProGuard是一个代码混淆和优化工具,可以帮助减小APK大小并提高运行时性能。确保在发布应用程序之前使用ProGuard来混淆和优化代码。
-
使用合适的数据存储: 使用合适的本地存储方式,以减小启动时需要加载的数据量。尽可能使用轻量级的数据存储,例如SharedPreferences或SQLite数据库。
-
异步初始化: 将应用程序的初始化任务异步执行,确保不会阻塞主线程。可以使用
AsyncTask
、Loader
、或者其他异步加载框架。 -
合理使用多线程: 在合适的情况下,使用多线程来进行一些耗时的初始化工作。但要注意在主线程上执行与UI相关的任务,以确保良好的用户体验。
-
优化布局文件: 精简布局文件,避免过度嵌套和不必要的层次结构。这有助于提高布局文件的加载速度。
-
使用预加载(Preloading): 在应用启动时预加载即将使用的资源和数据,以减小用户导航到相关页面时的加载时间。
-
性能分析和调试工具: 使用Android Studio提供的性能分析工具来检查应用程序的性能瓶颈,例如CPU使用率、内存使用情况等。这有助于精确定位问题并进行优化。
-
适配Android Vitals: 关注Android Vitals中的启动时间指标,如应用程序启动时间(App Start Time),确保在各种设备上都有较好的性能。
通过结合以上策略,可以显著提高Android应用的冷启动性能,提升用户体验。最终的优化方案可能需要根据具体应用的特点和需求进行调整。
参考地址
Android性能优化(一)App启动原理分析及启动时间优化:
https://blog.csdn.net/sakuramashiro/article/details/78986167
Android 性能优化:使用 TraceView 找到卡顿的元凶:https://www.ituring.com.cn/article/273967