Android:覆盖 onPause 和 onResume - 正确的方式
重写 活动的 和 方法时,调用 和 的适当位置在哪里?在方法的开头还是在结尾?onPause()
onResume()
super.onPause()
super.onResume()
重写 活动的 和 方法时,调用 和 的适当位置在哪里?在方法的开头还是在结尾?onPause()
onResume()
super.onPause()
super.onResume()
从 http://developer.android.com/guide/components/activities.html#ImplementingLifecycleCallbacks:
在执行任何工作之前,这些生命周期方法的实现必须始终调用超类实现,如上面的示例所示。
因此,对于生命周期回调,如 和 ,我们应该在开始时做或做。对于其他方法,这完全取决于超类的语义。onPause()
onResume()
super.onPause()
super.onResume()
更新:这是公认的答案,它包含了大量的好信息,包括一个有用的图表,汇集到一个地方。但是,它似乎是不正确的,至少根据当前的Android文档,正如海报所指出的那样,这是SDK信息的最终来源。可能在发布此答案后,文档得到了澄清。但是,无论如何,不要停止阅读这个答案,请查看下面的espinchi的答案。它有自己的文档。
方法的位置仅取决于您的偏好。只有当这些方法采用参数或执行一些并发工作时,才重要。例如,如果您执行以下操作:super
@Override
protected void onPause() {
try {
someOtherThread.join();
} catch (InterruptedException e) {
LOG.e(e);
}
super.onPause();
}
它可能会阻塞线程并阻止被调用。super
我建议您应该阅读所有可用的文档,因为它们会对您有很大帮助。例如,这是您可以在javadoc中找到的内容。我加粗了重要部分:onPause
在活动进入后台但尚未(尚未)被终止时,作为活动生命周期的一部分调用。与 onResume() 对应。
当活动 B 在活动 A 之前启动时,将在 A 上调用此回调,在 A 的 onPause() 返回之前不会创建 B,因此请确保不要在此处执行任何冗长操作。
此回调主要用于保存活动正在编辑的任何持久状态,向用户呈现“就地编辑”模型,并确保在没有足够的资源来启动新活动而不首先终止此活动时不会丢失任何内容。这也是执行停止动画和其他消耗大量 CPU 的操作的好地方,以便尽可能快地切换到下一个活动,或者关闭独占访问的资源(如相机)。
在系统需要更多内存的情况下,它可能会终止暂停的进程以回收资源。因此,应确保在从此函数返回时保存所有状态。通常 onSaveInstanceState(Bundle) 用于在活动中保存每个实例的状态,此方法用于存储全局持久性数据(在内容提供程序、文件等中)。
收到此调用后,您通常会收到对 onStop() 的后续调用(在下一个活动恢复并显示之后),但是在某些情况下,将直接回调 onResume() 而不经历停止状态。
派生类必须调用超类对此方法的实现。否则,将引发异常。
我确实为您推荐这个流程图,它将极大地帮助您的发展: