前台运行的Activity有时候可能被其他组件给阻断,处于半透明的状态。比如说弹出的对话框,此时Acvitity进入paused状态
当你的Activity进入paused状态,系统会调用onPause()函数,这样你可以暂停正在进行的动作比如暂停视频播放或者在该函数里持久化用户的数据防止用户突然离开,导致的数据丢失。如果用户回到该Activity调用onResume()函数
暂停Activity
当系统调用了onPause()从技术上说你的Activity已经是半透明的。但这也意味着用户可能很快要离开应用。所以,可以在该函数中执行以下操作:
- 暂停动画或者停止其他消耗cpu的动作
- 提交未保存的改变。只有当用户希望如此时才去做(比如保存邮件的草稿)
- 释放资源,比如广播接收器,或者对传感器的操作。
比如相机:
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Release the Camera because we don't need it when paused
// and other activities might need to use it.
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
当你确定用户希望存储个人数据时才在这里持久化。否则不要自动保存用户的数据。在该函数里也不要执行耗费cpu的操作,如:写数据到数据库。这样会影响或者拖慢可见试图的操作效果(你可以在onStop()阶段操作一些负担较重的任务)
注意:当Activity暂停时候,Activity实例会保留在内存中,当Activity被Resume时会被重新调出。Activity被创建后,任何导致回到Resumed的回调都不需要重新初始化组件
恢复Activity
当从paused状态回到resumed状态时调用onResume()函数。注意每次你的Activity回到前台都会调用该函数,包括第一创建Activity。你需要实现onResume()来初始化你在onPause()中释放的资源
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
// Get the Camera instance as the activity achieves full user focus
if (mCamera == null) {
initializeCamera(); // Local method to handle camera init
}
}