电视网站免费大全,wordpress微信快捷支付,网站首页模板管理,成都百度seo公司启动优化目的
用户体验#xff1a;
应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢#xff0c;用户可能会感到不满#xff0c;并且有可能选择卸载或切换到竞争对手的应用。通过启动优化#xff0c;可以提高应用的启动…启动优化目的
用户体验
应用的启动速度直接影响用户体验。用户希望应用能够快速启动并迅速响应他们的操作。如果应用启动较慢用户可能会感到不满并且有可能选择卸载或切换到竞争对手的应用。通过启动优化可以提高应用的启动速度让用户获得更好的使用体验。
竞争优势
移动应用市场竞争激烈用户有大量的选择。如果应用启动较慢可能会失去用户尤其是在与同类应用相比时。通过启动优化可以提高应用的响应速度吸引更多用户留在应用中并提升与竞争对手的差异化竞争力。
资源管理
应用启动时可能需要加载和初始化许多资源如界面布局、数据等。如果启动过程冗长且资源占用过多可能会增加系统负担影响其他应用的运行性能甚至导致系统崩溃。通过启动优化可以更有效地管理和利用资源减少对系统资源的占用提高系统的整体性能和稳定性。
启动优化的范围
在Android应用的启动过程中有三个主要的屏幕分别是第一屏、第二屏和第三屏。第一屏是指应用程序加载的过程通常会显示一个主题中设置的背景图片。第二屏是指Splash页面显示了启动界面的内容。第三屏是指MainActivity显示了应用的主要交互界面。
为了提高用户体验我们通常关注应用启动到可交互页面的时间也就是第一屏和第二屏的耗时。在这之前还有Application的创建过程和SplashActivity的启动创建过程。所以在启动的优化范围内通常会从Application.attachBaseContext()开始直到Main.onWindowFocusChanged()结束。
优化的目标是减少启动耗时让应用尽快显示可交互页面。因此需要关注第一屏的耗时即Application的启动耗时以及第一屏和第二屏的总耗时即Application启动到可交互页面的启动耗时。
Application的创建过程的调用顺序 Activity的创建到显示过程调用顺序
优化思路
1.工具使用 这样就可以使用Android Studio带的性能检测工具进行检测了。
2.优化方法
1.懒加载包括业务与布局的懒加载 2.抛到子线程让其自己加载 3.提前加载通过多线程提高效率 4.检查主线程的IO操作 5.控制线程的数量和GC的次数
Application.onCreate()
SDK优化
懒加载
将SDK的初始化延迟到真正需要使用的时候再进行初始化而不是在Application的初始化过程中全部加载。这样可以减少启动时的初始化时间提高启动速度。
SDK之间依赖关系的优化
某些SDK可能需要在其他SDK完成加载后才能进行初始化。可以利用拓扑算法来优化SDK的加载顺序确保依赖的SDK先于依赖它的SDK进行加载和初始化。这样可以避免因为依赖关系导致的初始化错误或者耗时。
子线程初始化SDK
将SDK的初始化过程放到子线程中进行避免阻塞主线程的时间。特别是一些必须初始化的SDK可以通过多线程加载并使用CountDownLatch进行线程的阻塞和唤醒确保主线程能够尽快响应用户操作。
业务代码优化
禁止滥用ContentProvider
由于ContentProvider在Application.attachBaseContext()时会进行初始化滥用会增加启动时间。因此需要慎重使用ContentProvider避免过多地使用它来处理业务逻辑。
优化主线程耗时操作
查找并优化Application主线程中耗时的代码以减少对启动时间的影响。可以通过异步操作或者其他优化手段将耗时操作移到子线程中进行从而提升应用的启动速度。
Activity.onCreate()
优化布局
减少布局背景的重复渲染、减少层级、使用ViewStub按需加载不一定显示的布局。可以考虑在子线程中加载布局或提前加载以减少对主线程的阻塞时间。
延迟初始化
避免在initView()中进行耗时操作如IO操作、播放器等。将这些操作做到按需懒加载或者在多线程中加载避免阻塞主线程。
懒加载Fragment
对于主页面的ViewPagerFragment按需懒加载Fragment只在滑动到对应页面时才进行加载和初始化避免一次性加载所有Fragment节约资源和提高响应速度。
Activity.onResume()
不要在这里面做耗时操作不要在这里面做耗时操作不要在这里面做耗时操作。 WMS里面的知识点页面渲染是在onResume里面的。 SDK之间依赖关系的优化接上面的SDK优化的第二点
有向无环图DAG
图是由一组节点也称为顶点和连接这些节点的边组成的数据结构。有向图是指图中的边都有一个方向而无向图的边没有方向。有向无环图是指有向图中不存在形成环路的路径即从任何节点出发经过若干条边后不能回到出发点。
在 Android 的 app 启动优化中使用有向无环图的一个常见场景是依赖关系管理。在复杂的 Android 应用中不同组件如 Activity、Fragment、Service 等之间可能存在依赖关系即某个组件的启动依赖于其他组件的完成。借助有向无环图可以清晰地表示这些依赖关系并通过拓扑排序算法来确定启动顺序提高应用的启动性能。
具体来说Android 的应用启动流程可以看作一张有向图其中节点表示不同的组件边表示组件之间的依赖关系。例如一个 Activity 可能需要等待其他 Activity 的初始化完成后才能启动。通过构建有效的有向无环图可以将这些依赖关系可视化并根据拓扑排序算法确定启动顺序从而减少不必要的等待时间提高应用的响应速度。
Android Startup
Android Startup提供一种在应用启动时能够更加简单、高效的方式来初始化组件。开发人员可以使用Android Startup来简化启动序列并显式地设置初始化顺序与组件之间的依赖关系。 与此同时Android Startup支持同步与异步等待、手动控制依赖执行时机并通过有向无环图拓扑排序的方式来保证内部依赖组件的初始化顺序。
链接: 关于Android Startup的一篇大佬的文章