Training--暂停和继续(运行)一个Activity

来源:互联网 发布:淘宝直通车选词助手 编辑:程序博客网 时间:2024/06/04 20:06

暂停和继续(运行)一个Activity

 

在app的正常使用中,前台的activity有时会被其他可视化组件遮挡而进入暂停 状态。例如,当打开一个半透明的activity(例如一个对话框风格的),之前的activity就会暂停。只要这个activity部分可见,当前未获得用户焦点,它就保持暂停状态。

 

尽管如此,一旦某个activity完全被遮挡且不可见,它就会处于停止状态(下节课讨论此问题)。

 

当你的activity进入暂停状态后,系统会调用你的activity的onPause()方法,在这个方法里,你可以停止一些此时不应再进行的动作(例如播放视频)或者保存一些需要永久保存的信息,以防止用户离开你的app导致信息丢失。如果用户返回到你的处于暂停状态的activity,那么系统会继续运行它并且调用onResume()方法。

 

注意:当你的activity被调用onPause()时,它可能意味着你的activity会暂停一会儿,用户会很快返回到你的activity。尽管如此,它通常表示用户正在离开你的activity。

 

Figure 1. 当一个半透明的activity遮挡住了你的activity,系统会调用 onPause()  activity会停留在暂停(Paused)状态等待(1).当用户返回时,activity正处于暂停状态,系统会调用 onResume() (2).

 

暂停你的Activity

 

当系统调用你的activity的onPause()方法时,从技术上讲,这意味着你的activity处于部分可见,但是通常情况下,表明用户实际上要离开你的activity,很可能接下来你的activity就会进入停止(Stopped)状态。你应该通常使用onPause()做如下事情:

 

停止动画或者其它消耗CPU的操作。

提交未保存的信息,只有当用户希望离开的时候此信息被永久保存(例如保存邮件草稿)。

释放系统资源,比如一个广播接收者,传感器处理(如GPS),或者其他任何当activity处于暂停状态,而用户不再需要的影响电池寿命的资源。(本人理解,重点是用户不再需要的资源)

 

例如,如果你的应用使用了Camera,在onPause()里是释放它的最好的地方。

@Overridepublic void onPause() {    super.onPause();  //总是首先调用基类方法    //当处于暂停状态释放Camera     // 其它Activity可能需要它.    if (mCamera != null) {        mCamera.release()        mCamera = null;    }}

 

通常情况下,你不应该在onPause()方法里将用户的改动(例如用户在表格中输入的个人信息)存储到永久区域里。只有当用户希望他的改动自动保存的时候(例如编辑邮件草稿),你才应该将这些改动永远存储起来。尽管如此,你也应该避免在onPause()里做一些CPU密集型的工作,比如写数据库。因为这样会减缓向下一个Activity的迁移显示的流畅性(你应该在onStop()里做这些操作。)

 

如果你的activity确实是将要停止,你应该保证在onPause()方法里做相对简单地操作,这样可以使到下一个activity的转换显示保持流畅。

 

继续(运行)你的Activity

 

当用户返回到处于暂停状态的activity时,系统会调用它的onResume()方法。

 

你应该知道当你的activity每一次进入前台时,包括第一次创建,系统都会调用这个方法。正是如此,你应该在onResume()初始化那些在onPause()中释放的组件,执行其他一些当进入运行状态时必须进行的初始化操作(例如开始动画和初始化一些当activity获得用户焦点时才使用的组件。)

 

下面的onResume()例子,正好与上面的onPause()相反。它初始化在activity处于暂停状态时释放的camera。

 

@Overridepublic void onResume() {    super.onResume();  //总是首先调用基类方法    // 每当activity获得用户焦点,获得camera实例    if (mCamera == null) {        initializeCamera(); // 调用局部方法初始化camera    }}


0 0