9

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

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

  2. 告诉我一些你为了更好的内存消耗而做的练习?我在这里看了看,但似乎还有其他东西。因为面试官提到了一些和静态变量相关的东西比较好。

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

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

4

1 回答 1

9

一一解答:

编号。1

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

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

编号。2

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

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

编号。3

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

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

只要服务已启动或绑定了客户端,Android 系统就会尝试保持托管服务的进程。当内存不足并需要终止现有进程时, 托管服务的进程的优先级将是以下可能性中的较高者[完整列表]

在活动中,列出了以下内容

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

  • 如果某个活动在屏幕的前台(在堆栈的顶部),则它处于活动状态或正在运行。

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

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

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

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

结论

“MA Jackson”对优化的引用:

我们在优化问题上遵循两条规则:
规则 1:不要这样做。
规则 2(仅适用于专家):不要这样做——也就是说,在你有一个完全清晰且未优化的解决方案之前不要这样做。

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

于 2012-08-04T22:57:34.860 回答