zoukankan      html  css  js  c++  java
  • 异常情况下的Activity生命周期分析

    情况1:资源相关的系统配置发生改变

    资源相关的系统配置发生改变,举个栗子。当前Activity处于竖屏状态的时候突然转成横屏,系统配置发生了改变,Activity就会销毁并且重建,其onPause, onStop, onDestory均会被调用。因为实在异常情况下终止的,所以系统会调用onSaveInstanceState来保存当前Activity状态。这个方法是在onStop之前,与onPause没有固定的时序关系。当Activity重建的时候系统会把onSaveInstanceState所保存的Bundle作为对象传递给onRestoreInstanceState和onCreate方法。

    注:

    • View的源码中每个View都有onSaveInstanceState和onRestoreInstanceState这两个方法。
    • 接收位置可以是onRestoreInstanceState和onCreate方法,区别是:onRestoreInstanceState如果被调用,参数Bundle一定是有值的,在onCreate中需要判断参数是否为null。
    • onSaveInstanceState只有在Activity即将销毁并有机会重新显示时才会调用,正常销毁的Activity生命周期中不会调用,比如:旋转屏幕,按Home键,启动新Activity等。

    情况2:资源内存不足导致低优先级Activity被杀死

    Activity优先级

    1. 前台Activity——正在和用户交互的Activity,优先级最高
    2. 可见但非前台Activity——Activity中弹出的对话框导致Activity可见但无法交互
    3. 后台Activity——已经被暂停的Activity,优先级最低

    系统内存不足是,会按照以上优先级杀死Activity,并通过onSaveInstanceState和onRestoreInstanceState这两个方法来存储和恢复数据。

    不让Activity重新创建的方法

    系统配置有很多内容,当某项改变时,我们不想让Activity重新创建可以在AndroidMainfest中给Activity指定configChanges属性。比如

    1
    android:configChanges="orientation"

    android:configChanges="xxx"属性,常用的主要有下面三个选项:
    local:设备的本地位置发生了变化,一般指切换了系统语言;
    keyboardHidden:键盘的可访问性发生了变化,比如用户调出了键盘;
    orientation:屏幕方向发生了变化,比如旋转了手机屏幕。
    配置了android:configChanges="xxx"属性之后,Activity就不会在对应变化发生时重新创建,而是调用Activity的onConfigurationChanged方法。

    注意:

    新Activity是透明主题时,旧Activity不会走onStop;

    Activity切换时,旧Activity的onPause会先执行,然后才会启动新的Activity;

    Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时 候,onRestoreInstanceState方法会被回调,时序在onStart之后;

  • 相关阅读:
    jmeter非GUI界面运行脚本
    jmeter函数助手
    jmeter远程压力测试
    linux无工具命令监控
    nmon定时任务
    nmon安装
    Charles抓包
    正交工具allpairs应用
    数据库常用架构和同步工作原理
    ARTS习惯(2)
  • 原文地址:https://www.cnblogs.com/krislight1105/p/5295955.html
Copyright © 2011-2022 走看看