逐个回答:
1号
听起来不对。说RelativeLayout比任何其他布局总是更快是错误的。一个布局是“快”还是“慢”取决于计算所有子项的位置和大小所需的时间。因此,当您仅显示15行TextView
时,一个LinearLayout
肯定会更快(且使用起来更加简便)。
通常,我建议使用最适合您情况的布局。
2号
偏爱静态变量的“优点”是它们只初始化一次(因此在内存中)。但这更多是一种设计决策而不是性能决策。
您应该避免在内存中使用大型嵌套集合(例如List<List<HashMap<?,?>>
),但这应该是常识。关于对象创建的问题是,如果您创建了许多对象并且没有保留对它们的引用,则它们将被垃圾收集。这将增加应用程序的运行时开销。
3号
这既对又错。服务可以以不同的优先级启动。但在杀死应用程序使用的任何内容(无论是服务还是活动)之前,后台应用程序及其资源将被释放。
对于服务,文档提供了多个提示:
Android系统将尝试仅在服务已启动或客户端绑定到它时保留托管服务的进程。在内存不足且需要杀死现有进程时,托管服务的进程的优先级将是以下可能性中较高的: [完整列表]
对于活动,列出了以下信息:
一个Activity主要有四种状态:
- 如果一个Activity在屏幕前台(堆栈的顶部),它就是活动或正在运行的。
- 如果一个Activity失去焦点但仍可见(也就是说,新的非全屏或透明的Activity已经位于你的Activity上方),它就暂停了。暂停的Activity完全存活着(它保持了所有状态和成员信息,并继续附加到窗口管理器),但在极低内存情况下可能被系统杀死。
- 如果一个Activity被另一个Activity完全遮挡,它就停止了。它仍然保留所有状态和成员信息,但它不再对用户可见,所以它的窗口被隐藏了,而且当需要在其他地方获得内存时,通常会被系统杀死。
- 如果一个Activity已被暂停或停止,系统可以通过要求它完成或简单地终止其进程来将其从内存中删除。当它再次显示给用户时,它必须完全重新启动并恢复到先前的状态。
因此,对于Activities而言,它是否被杀死取决于其当前状态。
"M. A. Jackson"提出的优化引用:
我们在优化问题上遵循两条规则:
规则1:不要优化。
规则2(仅限专家):不要优化,直到您拥有一个非常清晰和未经优化的解决方案。
因为某个特定平台的功能“太慢”而不使用它通常是个坏主意。Google和Oracle非常注重他们的标准库尽可能地得到了优化。让专家们去关心这样的事情吧。