生命周期
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
onStart() 调用后时 Activity 可见但是不可交互,onResume() 调用后 Activity 处于前台并具有焦点,可以处理用户交互。
首次创建Activity 时进行调用,需要调用setContentView设置布局。
Activity 被销毁前调用。
Activity A 启动 Activity B:
弹出 Dialog 不会影响生命周期回调,因为 Dialog 是通过在 Window 中添加 View 的方式展示的。
如果Activity B 是完全透明的,那么Activity A 此时是可见的,所以不会调用Activity A 的onStop 方法。
当系统为了恢复内存而销毁Activity前或者配置变更(屏幕方向、语言等)时,会调用这个方法,系统会传入一个Bundle 对象用于存储要恢复的数据。显式销毁(按下返回键)Activity时不会调用。
当Activity 重建时,可以在onCreate或者onRestoreInstanceState方法中拿到保存的数据。
Activity 的 onSaveInstanceState 的默认实现会调用 View 的onSaveInstanceState用于恢复View状态(需要为View 指定 id),比如EditText的输入文本等。
onPause() 时,另一个 Activity 位于屏幕前台并具有用户焦点,但此时的 Activity 仍可见。也就是说,另一个 Activity 显示在此 Activity 上方,并且该 Activity 部分透明或未覆盖整个屏幕。 暂停的 Activity 处于完全活动状态( 对象保留在内存中,它保留了所有状态和成员信息,并与窗口管理器保持连接),但在内存极度不足的情况下,可能会被系统终止。不一定会调用onStop和onDestroy方法,所以应该尽量将重要数据保存的操作放到onPause方法中,但不能太耗时,否则会减免Activity 跳转速度,影响用户体验。
onStop 时,Activity 被另一个Activity完全覆盖,处于「后台」状态,对用户不可见。 已停止的 Activity 同样仍处于活动状态( 对象保留在内存中,它保留了所有状态和成员信息,但未与窗口管理器连接)。 不过,在需要释放内存时可能会被系统终止。
Activity A 的 方法执行。
Activity B 的 、 和 方法依次执行。(Activity B 现在具有用户焦点。)
然后,如果 Activity A 在屏幕上不再可见,则其 方法执行。
onPause()是Activity生命周期的一部分,是明确会被调用的方法,而onSaveInstanceState方法并不能保证系统会调用,因此只应该利用它来记录 Activity 的瞬态(UI 的状态);存储持久性数据应在 方法中进行。
在清单文件中编辑相应的 元素,增加 属性,该属性的值表示要处理的配置。最常用的值包括 "orientation"
、"screenSize"
和 "keyboardHidden"
。"orientation"
值可在屏幕方向发生变更时阻止重启。"screenSize"
值也可在屏幕方向发生变更时阻止重启,但仅适用于 Android 3.2(API 级别 13)及以上版本的系统。若想在应用中手动处理配置变更,必须在 android:configChanges
属性中声明 "orientation"
和 "screenSize"
值。可以在属性中声明多个配置值,方法是用|
字符将其进行分隔。
这样当其中某个配置发生变化,Activity 也不会重启。但会接收到对 的调用消息。此方法会收到传递的 对象,从而指定新设备配置。可以通过读取 中的字段确定新配置,然后通过更新界面所用资源进行适当的更改。调用此方法时,Activity 的 对象会相应地进行更新,并根据新配置返回资源,以便在系统不重启 Activity 的情况下轻松重置界面元素。