Android应用性能优化指南
提高应用程序的性能以实现更流畅的用户体验和更高的可见度。
性能在任何应用程序的成功中发挥着重要的作用。为用户提供流畅无缝的体验应该是开发人员的重点。
应用程序大小
在用户开始使用我们的应用程序之前,他们需要下载应用程序并将其安装到设备上。 如果您的应用程序需要100-200 mb的数据才能安装,则许多用户在实际下载之前会犹豫不决。此外,应用程序大小会影响应用程序的加载速度。
减少应用程序大小的技巧
- 使用Android应用程序包(AAB)而不是APK,以确保仅包含特定设备配置所需的资源,从而减少初始下载大小。
- 优先使用SVG而不是PNG或其他格式,因为它可以在不影响质量的情况下进行缩放。
- 删除任何未使用的资源,例如图像、视频或文本文件。
- 不依赖于第三方库来进行任何较小或基本的功能。 仅在必要时使用。
- 删除任何未使用的代码或不必要的XML文件。
- 使用ProGuard或R8来最小化代码大小。
应用程序启动时间
我们在任何应用程序中注意到的第一件事就是启动时间。 用户希望他们的应用程序反应灵敏,快速加载。如果应用程序无法快速加载,可能会令用户失望,并导致卸载和在PlayStore上的差评。
根据本文所述,70%的用户希望应用程序在3秒内启动,63%的用户将放弃启动超过5秒的应用程序。
如何优化应用程序启动时间?
- 使用显示品牌图像或动画的启动屏幕。 这使用户知道您的应用程序未冻结并使他们参与其中。
- 仅加载启动应用程序所需的数据。
- 避免在应用程序启动期间进行文件访问和JSON反序列化。
- 避免在应用程序的onCreate方法中进行任何不必要的初始化。
- 避免创建全局静态对象。而是采用单例模式,在第一次访问对象时初始化应用程序。
优化布局
在创建视图时使用的嵌套越多,则渲染所需时间就越长。始终尽可能简化并避免嵌套视图。 例如,使用LinearLayout的嵌套实例会导致视图层次结构过于深入。 相反,在管理复杂或嵌套的UI时,请使用·ConstraintLayout·。
如何优化布局?
- 使用数据绑定和视图绑定。 这些将帮助您直接将数据注入UI,而不是使用旧的传统
findViewById
方法。 - 对于在UI中很少使用或不可见的复杂视图,请使用
ViewStub
类。 它将确保仅在需要时加载它。 - 使用
<include>
重用常见视图。 - 使用
<merge>
来减少嵌套视图。 - 使用
Constraint Layout
而不是多次嵌套其他布局。
最小化网络请求
我们的大多数应用程序依赖于API调用或通过互联网下载和上传数据。频繁的API调用和使用蜂窝数据或wifi的高使用率可能导致电池耗尽。
可以使用的技术
- 为避免主线程被阻塞(这可能会导致性能不佳),请使用后台线程进行网络查询。
- 首先加载文本数据,然后再加载图像。
- 使用缓存保存经常使用的数据和图像。 您可以使用Picasso和Glide等库进行此操作。
- 使用分页批量加载数据,而不是一次从服务器请求所有数据。 这将允许用户在后台获取其他数据的同时与应用程序交互。
- 与API或数据库交互时,请仅请求要求的特定数据,而不是具有所有字段。
注意内存使用
内存使用是应用程序开发的最重要部分。 很多时候,开发人员主要关注完成功能而忽略内存使用。 如果处理不当,可能会导致意外崩溃或性能问题。
处理内存问题时要注意的事项
- 使用Android Profiler或LeakCanary等工具来识别任何不需要的内存泄漏。
- 在必要之前不要使用第三方库。
- 审查您的内存使用情况。
- 在可能的情况下使用原始数据类型。
- 优化位图-使用缩小的图像以减少内存使用。
- 避免紧密耦合。
- 实现分页或懒加载,而不是一次性将所有内容加载到内存中。
- 定期审查代码库以识别任何内存泄漏。
审查和优化代码
为了使我们的应用程序运行顺畅,我们应尽量保持代码的优化。 在执行基本搜索时使用正确的数据结构也可以影响应用程序的工作方式。 例如,在大型数据集中搜索使用线性搜索算法将比使用二进制搜索算法慢得多。
如何优化您的代码的技巧
- 尝试在后端执行繁重操作,而不是在前端执行所有操作。
- 使用StringBuilder插入、追加或修改任何字符串,而不是String连接。
- 使用异步编程技术将耗时任务转移到后台线程。
- 如果使用本地数据库,则通过分析和调试数据库查询来编写可以更快获取数据的优化查询。
- 保持SDK和第三方库的最新状态以提高性能和安全更新。
使用Android Profiler工具
Android Studio具有Android Profiler,可监视Android应用程序所使用的CPU、内存、网络和电池。
它如何有帮助
CPU Profiler
:这将帮助您了解应用程序如何使用设备的CPU资源。 它将提供有关CPU使用率、线程活动和系统事件的详细信息。Memory Profiler
:这将帮助您跟踪应用程序的内存使用情况。 它详细说明对象分配、内存泄漏和垃圾收集事件。 这可以帮助识别应用程序中的内存泄漏。 您还可以使用Leak Canary检测应用程序中的内存泄漏。Network Profiler
:这有助于您监视应用程序的网络活动。 它提供有关网络请求、响应和数据传输速率的信息。 您可以使用它来识别与网络相关的问题,例如API调用缓慢或错误的数据传输。Energy Profiler
:这将帮助您跟踪应用程序的能量使用情况,这可能会导致电池耗尽。
结论
应用程序性能是应用程序开发的最重要方面。 忽略它可能会导致用户体验差,最终在PlayStore或App Store上评分不佳。 如果您花一些时间遵循上述实践,您可以确保您的应用程序运行顺畅并获得杰出的评价。