![](https://img.haomeiwen.com/i28232783/230dcf05e1bf96ce.png)
前言
这篇文章是关于制作一个更好的 Android 应用程序(现在没有滞后!只有流畅运行的 UI)。我们将学习如何提高 Android 应用程序的性能。
首先,我们应该了解Android App为什么会滞后?
为什么Android应用程序滞后?
我将从以下声明开始:
垃圾收集器:Android 应用性能税
Android App 性能低的主要原因是它运行 GC 非常频繁。
简单的一句话:GC 运行实际应用程序的时间没有运行。
所以,Android App在运行的时候,会根据你的代码分配很多对象,当这些对象不再被引用的时候,系统会在有内存压力的时候调用GC来释放这些对象,所以如果对象的分配和释放定期发生,GC 定期运行以释放内存,因此 GC 运行的时间越长,您的应用程序就不会在这段时间内运行。因此,该应用程序似乎落后了。因此,对于应用程序的用户来说,体验很糟糕。
Android App 每16ms更新一次 UI (考虑60FPS -> 1000ms/60 = 16.67ms~16ms)以实现流畅的 UI 渲染。所以如果GC在那个时间运行,应用程序无法在那个时间更新UI,这会导致跳过几帧,所以看起来应用程序是滞后的。所以实际的原因是 GC 正在运行,或者可能是主线程中的工作做得太多,以至于应用程序没有时间平滑地渲染它的 UI。
另一个原因可能是应用程序在主线程中做的太多,所以此时如果任何方法/任务花费的时间超过16 毫秒,应用程序将无法更新 UI,这意味着应用程序中将存在延迟那时。
基本上,系统会在每 16 毫秒后尝试重绘 UI。
![](https://img.haomeiwen.com/i28232783/a1052d63bfac4290.png)
如果我们在主线程上的任务耗时超过 16 毫秒怎么办。例如,如果我们的任务需要 26 毫秒。系统尝试更新 UI,但尚未准备好。所以它不会刷新任何东西。而且,这会导致 UI 在 32 毫秒而不是 16 毫秒后刷新。有丢帧。
即使有一个丢帧,也不会有流畅的动画。用户会发现它滞后。
所以,这些都是Android App性能低下的原因。
如何优化它?
为了优化它,我们需要关注以下几点:
- 减少GC运行时间
- 不要在主线程中做太多事情
提高性能的措施:
- 如果不需要,不要分配任何对象。
- 不要提前分配对象,仅在需要时分配对象。使用延迟初始化。
- 避免自动装箱,因为 Integer、Boolean 等会占用更多内存,因为 Integer 等类占用更多内存,因此请尽可能使用 int 而不是 Integer。
- 使用 ArrayMap 和 SparseArray。
- 使用对象池的概念来避免内存流失。
- 让繁重的工作远离主线程。在后台线程上传输它。
- 对常量使用 static final (或Kotlin 中的 const val)。
- 在不需要的地方避免使用内部 Getter/Setter(直接字段访问速度快 3 倍)
- 不要在内部类中泄漏上下文。
- 使用静态内部类而不是非静态类。
- 位图使用 LRU 缓存,避免位图的冗余解码,减少了一次又一次的 GC 调用。
- 使用StrictMode查找您在 Android 开发中应用程序主线程上的意外磁盘或网络访问或数据库查询等错误所做的事情。
- 使用 Profile GPU 渲染:它可以快速直观地表示渲染 UI 窗口的帧相对于 16 毫秒基准测试所需的时间。您可以从 Settings-> Developer Options-> Monitoring Section -> Select Profile GPU Rendering 启用它。
- 最后,不要分配大量不必要的对象。
这就是我们可以提高 Android 应用程序性能的方法。
作者:Amit Shekhar
链接:https://blog.mindorks.com/android-app-performance-tips-smooth-running-android-app
网友评论