龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 移动开发 > Android开发 >

Android中Activity的生命周期探讨(2)

时间:2014-10-23 02:28来源:网络整理 作者:网络 点击:
分享到:
(1)停止动画或者其他正在运行的操作,减少CPU浪费 (2)提交没有保存的改变,但仅仅是用户离开时保存的内容,如邮件 (3)释放系统资源,如broadc

(1)停止动画或者其他正在运行的操作,减少CPU浪费
(2)提交没有保存的改变,但仅仅是用户离开时保存的内容,如邮件
(3)释放系统资源,如broadcast receivers、sensors、GPS或者其他任何影响电量的资源。
(4)如果程序正在使用Camera,onPause()会是一个比较好的地方去释放资源的操作。

复制代码 代码如下:

@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;
    }
}

通常,不应该使用onPause()来保存用户改变的数据到永久存储上,当你确认用户期待那些改变能够自动保存的时候,才可以把那些数据存储到永久存储。然而,应该避免在onPause()时执行CPU-intensive的工作,例如写数据到DB,因为他会导致切换Activity变得缓慢。这些工作应该放到onStop()中去坐。

如果,Activity实际上要被Stop,那么应减少在onPause中的工作量,提高流畅性。

恢复Activity

用户从Pause状态恢复时,调用onResume()方法。此时Activity处于最前台,包括第一次创建时,此时,应该在onResume中初始化那些你在onPause方法里释放掉的组件,并执行那些Activity每次进入Resumed state都需要的初始化动作。

复制代码 代码如下:

@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
    }
}

6、停止与重启Activity

恰当的停止与重启Activity会使用户感知程序的进行。下面一些场景涉及停止与重启:

(1)用户打开最近使用的App的菜单并切换到另外一个App,此时,你的App是被停止的,用户回到你的App,那么你的Activity被重启。
(2)用户在App中启动一个新的Activity的操作,当前Activity会在新Activity创建后stop,如果用户点击back按钮,回到上一个Activity,重启
(3)用户使用App,接到来电时。

停止状态UI不可见。系统在Activity停止时会在内存中保存了Activity实例,有时不需事先onStop(),onRestart()甚至onStart()方法,因为大多数的activity相对简单,activity会自己停止与重启。你只需要使用onPause来停止正在运行的动作,并断开系统资源链接。

上图显示:当用户离开你的Activity,系统会调用onStop()来停止Activity,用户返回时调用onRestart(),然后迅速调用onStart()与onResume(),无论什么原因导致Activity停止,系统总会在onStop之前调用onPause

停止Activity

当你的Activity调用onStop方法,Activity不再可见,并且应该释放那些不再需要的所有资源,一旦你的Activity停止了,系统会在不需要的这个activity时销毁它的实例。在极端情况下,系统会直接杀死你的App进程,并且不执行Activity的onDestroy()回调函数,因此你需要在onStop()来释放资源,否则内存泄露。尽管onPause方法在onStop之前调用,应应该使用onStop来执行CPU-intensive的shut-down操作。如写数据到DB。

当Activity停止,其对象会保存在内存中,并且在Resume时重新调用,不需在恢复到Resumed state状态前初始化那些被保存在内存中得组件,系统为我们保存了每一个在布局中的视图的当前状态。即使系统会在Activity stop时销毁这个Activity,它仍然会保存View对象的状态到一个Bundle中,并且在用户返回这个Activity时恢复他们。

精彩图集

赞助商链接