Activity
- Activity 是一个 Android 应用与用户交互的入口。
- Activity 是为 Android 应用提供绘制界面的窗口,一般来说,一个 Activity 就是 Android 应用的一个屏幕。
Activity 生命周期
Activity lifecycleActivity 状态
Activity states📍 Android 系统在内存紧张时会杀死一些进程来释放内存。一个进程会不会被杀死取决于这个进程当时的状态,而 Android 应用进程的状态和正运行在该进程中的 Activity 的状态有关。
📍 系统不会直接杀死 Activity 来释放内存,而是杀死这个 Activity 所在的整个进程。 🔗 Official Doc
Activity按被系统回收的可能性又可分为以下四个状态:
- 活动状态 (running)
- 暂停状态 (paused)
- 停止状态 (stopped)
- 死亡状态 (killed/destroyed)
1.活动状态(running)
活动状态一般是指该 Activity 正处于屏幕最显著的位置上显示,即该 Activity 是在 Android 活动栈的最顶端。一般地当 Activity 创建后就是处于该状态中。
期间触发的函数及顺序为: onCreate() -> onStart() -> onResume()
。
2.暂停状态(paused)
暂停状态一般指该 Activity 已失去了焦点但仍然是可见的状态(包括部分可见)。一个处于暂停状态的 Activity 只有在系统极度缺乏内存资源的情况下才会被系统强制结束。
运行状态到暂停状态所触发的函数及顺序为:onResume() -> onPuased()
。
暂停状态恢复至运行状态所触发的函数及顺序为:onPuased() -> onResume()
。
3.停止状态(stopped)
停止状态一般指该 Activity 被另一个 Activity 完全覆盖的状态,这是它仍然保持所有的状态,但是由于该 Activity 变得不可见,所以系统经常会由于内存不足而将该 Activity 强行结束。
暂停状态到停止状态所触发的函数及顺序为:onPuased() -> onStop()
。
停止状态恢复至运行状态所触发的函数及顺序为:onStop() -> onRestart() -> onStart() -> onResume()
。
4.死亡状态
死亡态是指该 Activity 被系统销毁。当一个 Activity 处于暂停状态或停止状态时就随处可能进入死亡状态,因为系统可能因内存不足而强行结束该 Activity。
停止状态到死亡状态分为两种情况:(1)由用户操作导致,则执行:onStop() -> onDestroy()
。(2)由系统自动强制执行,则该 Activity 被强行结束。
状态保存和恢复
当一个 Activity 非正常销毁时,系统会在 onStop()
方法前调用 onSaveInstanceState(bundle)
方法保存当前 Activity 的UI状态,在 Activity 再次创建的时候在 onStart()
后调用 onRestoreInstanceState(bundle)
恢复之前的状态。例如用户按 Home 键将当前应用置于后台、屏幕旋转等配置改变导致的 Activity 重建等情况。
屏幕旋转
当前 Activity 在 manifest 文件的注册中未指定 android:screenOrientation
属性时,屏幕旋转会使 Activity 销毁并重建,可通过以下方法保存和恢复之前的状态。
- ⭕️(推荐)使用
onSaveInstanceState(bundle)
方法保存状态,onRestoreInstanceState(bundle)
恢复之前的状态。 - 💔(不推荐)在 Activity 注册时配置
android:configChanges="orientation|keyboardHidden|screenSize"
阻止销毁和重建,然后在 Activity 的onConfigurationChanged(newConfig)
中处理相应逻辑。当 Activity 的重建代价太大且缓慢时考虑这种做法。
📚 更多内容:
网友评论