📜  如何让安卓应用程序流畅运行?

📅  最后修改于: 2022-05-13 01:58:43.213000             🧑  作者: Mango

如何让安卓应用程序流畅运行?

这篇文章的全部内容都是关于创建一个更好的 Android 应用程序(不再有延迟!)并构建一个运行流畅的界面。我们将了解如何提高 Android 应用程序的性能。首先,我们必须确定一个大问题:

为什么安卓应用程序变慢了?或为什么 Android 应用程序滞后?

我们将从您的应用程序表现不佳的主题罪魁祸首开始:

Android App性能不佳的主要原因是它经常执行GC 。简而言之:在 GC 执行期间,真正的应用程序没有运行。所以,Android App在运行的时候,会根据你的代码分配很多对象,当这些对象不再被引用时,系统会在有内存压力的时候调用GC来释放这些对象,所以如果对象的分配和释放发生在定期,GC 会定期运行以释放内存,因此 GC 运行的时间越多,您的应用运行的时间就越少。结果,看起来该应用程序运行缓慢。结果,应用程序用户具有负面体验。

如何确保流畅的 UI 和过渡?

为了流畅的 UI 渲染,Android App 每 16ms 刷新一次 UI(假设 60FPS -> 1000ms/60 = 16.67ms16ms)。因此,如果 GC 在此期间运行,则应用无法刷新 UI,导致跳过几帧,给人一种应用迟缓的印象。所以真正的原因是 GC 正在运行,或者工作在主线程中完成得太快,导致应用程序无法流畅地渲染其 UI。

另一个原因是应用程序可能在主线程中执行过多,如果任何方法/任务花费的时间超过 16 - 18ms,应用程序将无法刷新 UI,导致应用程序在此期间出现延迟。

了解滞后的 UI

如果我们的主线程工作时间超过 16ms 怎么办?例如,假设我们的工作需要 26 毫秒。系统尝试刷新用户界面,但尚未准备好。结果,什么都不会被刷新。结果,UI 在 32 毫秒而不是 16 毫秒后更新。缺少帧。

即使丢失一帧也不会有平滑的运动。对用户来说会很慢。这些都是Android App性能不佳的原因。

怎么提高?

为了最大化它,我们必须专注于以下几点:

  • 减少 GC 运行所需的时间
  • 在主线程中,不要做太多事情。
  • 在 Android 中使用替代线程和线程。

提高性能的步骤包括

  • 使用 ArrayMap 和 SparseArray。这篇文章将解释为什么以及何时应该使用 ArrayMap 和 SparseArray 来改进您的 Android 应用程序。
  • 不要过早分配对象;相反,仅在需要时分配对象。利用延迟初始化。
  • 如果一个对象不是必需的,则不应分配它。
  • 繁重的工作应该远离主线程。把它放在后台线程中。
  • 为了避免内存流失,请使用对象池的想法。单击此处了解有关位图池的更多信息。
  • 避免将 Auto-Boxing 用作 Integer、Boolean 等会消耗更多内存,因为 Integer 等类会消耗更多内存,因此请尽可能使用 int 而不是 Integer。
  • 对于常量,使用 static final
  • 尽可能避免使用内部 getter/setter(直接字段访问速度快 3 倍)
  • 上下文不应该在内部类中泄露。
  • 使用静态内部类而不是非静态内部类。
  • 为了尽量减少重复的位图解码,对位图使用 LRU 缓存;这会反复降低 GC 调用。
  • 在 Android 开发中,使用 StrictMode 查找您意外执行的操作,例如无意的磁盘或网络访问或应用程序主线程上的数据库查询。
  • 使用 GPU 渲染配置文件:与 16 毫秒基准相比,它提供了绘制 UI 窗口帧所需时间的即时视觉描述。

最后,避免分配过多的对象。