zoukankan      html  css  js  c++  java
  • Activity生命周期与状态保存

    弹出系统对话框,程序仍部分可见

    onPause

    对话框消失时

    onResume

     

    调用一个新的Activity,老的Activity不可见时

    onPause->onStop

    从新的Activity返回时

    onRestart->onStart->onResume

     

    正常运行的Activity正常结束时

    onPause->onStop->onDestroy

     

    onResume

    这不是用来判断Activity是否对用户可见的最好方法。即使这个方法被调用后,也可能有一些系统窗口在我们的Activity前面,如keyguard。onWindowFocusChanged是最准确的。

    对于一些没有通过类似managedQuery(android.net.Uri , String[], String, String[], String)这样的方法交给系统管理的Cursor来说,这个时候应该重新获取。因为,按照理论来说,在onStop时,你把它们deactive了。

     

    假设Activity A启动一个Activity B,那么,系统会先调用A的onPause,然后调用B的onCreate、onStart、onResume。然后才会调用A的onStop方法。

    因此,在旧的Activity的onPause返回之前,新的Activity不会被创建。因此,这里不要做太费时的事情。

    onPause方法中建议做的操作有:停止动画这样大量消耗CPU的动作,使Activity的切换更快速;关掉相机这样独占式访问的资源。

     

    后台Activity因为资源紧张被系统终止时,无论是否可见,都不会调用任何方法,除onSaveInstanceState。

     

    通过android.os.Process.killProcess杀死时,不会调用任何方法,包括onSaveInstanceState.

    关于状态保存:

    onSaveInstanceState

    当Activity被切换到后台(部分可见或者不可见,但己不与用户交互)时,就有可能因为资源紧张而被kill,会调用这个方法。

    如果这个方法被调用的话,会在onStop之前,但与onPause谁先谁后不确定。

    这个方法的默认实现中,保存了当前可见的View树的状态,重写时,如果要保留这个特性的话,调一下super.onSaveInstanceState。

     

    onRestoreInstanceState

    这个方法在onStart和onResume之间被调用。

    绝大部分情况下,使用onCreate就可以恢复上一次保存的状态 

    旋转屏幕的时候需要对一些数据进行保存。有如下方法:

     1.AndroidManifest.xml配置文件中的Activity标签下面添加:android:configChanges="orientation|keyboardHidden"

    然后在activity中重写onConfigurationChanged()方法,每次旋转时会调用该方法,可以再该方法中处理数据[无论你怎么旋转都不会销毁当前的Activity,只会执行onConfigurationChanged()方法,因此只要在该方法中处理响应的数据即可

    生命周期如下:

    onCreate->onStart->onResume->onConfigurationChanged()->

    onConfigurationChanged() 

    2. 如果销毁当前的Activity,那么就要重写Activity的两个方法onSaveInstanceState()和 onRestoreInstanceState(),显然从方法名字可以看出一个是保存

    数据,一个是还原数据,生命周期如下:

     onCreate->onStart->onResume->onSaveInstanceState

    ->onPause->onStop->onDestroy->onCreate->onStart

    ->onRestoreInstanceState->onResume 

  • 相关阅读:
    SpringMVC学习笔记六:类型转换器及类型转换异常处理
    SpringMVC学习笔记五:HandlerExceptionResolver异常处理
    SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理
    SpringMVC学习笔记三:Controller的返回值
    SpringMVC学习笔记二:参数接受
    SSH+Ajax实现用户名重复检查(二)
    SSH+Ajax实现用户名重复检查(一)
    Java添加事件的四种方式
    用Java开发一个本地服务管理软件
    Java Web开发中的名词解释
  • 原文地址:https://www.cnblogs.com/God-boy1/p/3934813.html
Copyright © 2011-2022 走看看