【问题标题】:Are there memory management tips to take care of when making Android Apps?制作 Android 应用程序时是否需要注意内存管理技巧?
【发布时间】:2012-08-02 11:43:57
【问题描述】:

我最近在一次有关 Android 的采访中被问到了一些问题。我搜索了其中一些,但找不到合适的资源和答案。所以想在这里跟大家分享一下。

  1. 在 Android 中使用的首选布局是什么(为了更好的内存消耗等)? 我没有答案,面试官告诉我这是相对布局。这是真的 ?对此有何解释?

  2. 请告诉我您为提高内存消耗而采取的一些做法? 我看了here,但似乎还有其他东西。因为面试官提到了一些和静态变量相关的东西比较好。

  3. 如果 Android 需要内存,它会杀死服务或 Activity 吗?一个优先问题。我也没有找到任何人讨论这个。面试官说 Service 的某些事情比活动具有高优先级(??),因此活动是将被杀死的组件。这是真的 ?任何进一步的资源或解释?

请分享您了解的有关此问题的任何知识或资源。

【问题讨论】:

  • 这不是三个问题合二为一吗?

标签: android android-layout android-memory


【解决方案1】:

一一解答:

编号。 1

听起来不对。RelativeLayout总是比任何其他布局都快是错误的。使布局“快”或“慢”的原因在于计算所有子项的位置和大小需要多长时间。因此,当您只显示 15 行 TextView 时,一个在另一个下方,LinearLayout 肯定会更快(并且使用起来不那么麻烦)。

一般来说,我建议使用最适合您情况的布局。

编号。 2

首选静态变量的“优点”是它们只被初始化(并因此在内存中)一次。但这更像是一项设计决策,而不是性能决策。

您应该避免在内存中使用大量嵌套集合(例如List<List<HashMap<?,?>>),但这应该是常识。对象创建的问题是,如果您创建许多对象并且不保留对它们的任何引用,它们将被垃圾收集。这将为您的应用程序增加运行时开销。

编号。 3

这是对的,也是错的。服务可以以不同的优先级启动。但是,在您的应用程序使用的任何东西(无论是服务还是活动)被终止之前,后台应用程序及其资源都将被释放。

对于服务,文档给出了多个提示:

Android 系统将尝试保持托管服务的进程 只要服务已经启动或有客户端绑定到 当内存不足并需要终止现有进程时, 托管服务的进程的优先级将是较高的 以下可能性[Full List]

关于活动,the following is listed

一个活动基本上有四种状态:

  • 如果一个活动在屏幕的前台(在堆栈的顶部),它是活动的或正在运行的。

  • 如果 Activity 失去焦点但仍然可见(即,新的非全尺寸或透明 Activity 的焦点位于您的 活动),它被暂停。一个暂停的活动是完全活跃的(它 维护所有状态和成员信息,并保持连接到 窗口管理器),但可以在内存极低的情况下被系统杀死

  • 如果一个活动被另一个活动完全遮挡,它就会停止。它仍然保留所有状态和成员信息,但是, 它不再对用户可见,因此它的窗口被隐藏并且它 当其他地方需要内存时,通常会被系统杀死。

  • 如果一个活动被暂停或停止,系统可以通过要求它完成或简单地从内存中删除该活动 它的过程。 当它再次显示给用户时,它必须是 完全重新启动并恢复到之前的状态。

因此,对于活动,它取决于当前状态它被杀死的可能性。

结论

“M. A. Jackson”关于优化的引述:

我们在优化方面遵循两条规则:
规则 1:不要 这样做。
规则 2(仅适用于专家):暂时不要这样做 - 也就是说,不要 直到你有一个完全清晰且未经优化的解决方案。

因为“太慢”而不使用特定平台功能通常是个坏主意。 Google 和 Oracle 非常注意他们的标准库是 尽可能优化。让专家担心这样的事情。

【讨论】:

  • 感谢您的重播。你知道吗,关于静态变量,面试官说我们不应该使用它们,因为它们是在android需要内存时首先从内存中释放的!!!。我不确定他对任何答案是否正确。再次感谢
  • 在 2016 年,人们不得不对 #1 产生分歧。布局优化是一个严重的问题,在嵌套布局和 RecyclerView 等适配器视图中都是如此。此外,提到 AbsoluteLayout 而不说它不再使用(出于很大的原因)现在似乎具有误导性。
  • @mvai 你说得对,布局被弃用。我最初的观点是,您应该使用最适合手头工作的布局。我会相应地改变它。
  • @Lukas 我很清楚。谢谢你,如果我显得傲慢,我很抱歉。
猜你喜欢
  • 2012-07-31
  • 1970-01-01
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
相关资源
最近更新 更多