zoukankan      html  css  js  c++  java
  • Android onConfigurationChanged的作用

    API原文说明:

    android:configChanges
    Lists configuration changes that the activity will handle itself. When a configuration change occurs at runtime, the activity is shut down and restarted by default, but declaring a configuration with this attribute will prevent the activity from being restarted. Instead, the activity remains running and its onConfigurationChanged() method is called.

    Any or all of the following strings are valid values for this attribute. Multiple values are separated by '|' — for example, "locale|navigation|orientation".

    All of these configuration changes can impact the resource values seen by the application. Therefore, when onConfigurationChanged() is called, it will generally be necessary to again retrieve all resources (including view layouts, drawables, and so on) to correctly handle the change.

    在一些特殊的情况中,你可能希望当一种或者多种配置改变时避免重新启动你的activity。你可以通过在manifest中设置android:configChanges属性来实现这点。
    你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调用activity的
    onConfigurationChanged(Resources.Configuration)方法。如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明),
    你的activity仍然要被重新启动,而onConfigurationChanged(Resources.Configuration)将不会被调用。

    其次:android:configChanges=""中可以用的值:keyboard|mcc|mnc|locale|touchscreen|keyboardHidden|navigation|orientation……
    Configuration 类中包含了很多种信息,例如系统字体大小,orientation,输入设备类型等等.(如上图)
    比如:android:configChanges="orientation|keyboard|keyboardHidden"

    当Configuration改变后,ActivityManagerService将会发送"配置改变"的广播,会要求ActivityThread 重新启动当前focus的Activity.
    这是默认情况,我们不做任何处理,如果我们android:configChanges来配置Activity信息,那么就可以避免对Activity销毁再重新创建,而是调用
    onConfigurationChanged方法。

    通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChanged()方法。
    在AndroidManifest.xml中添加上诉代码的含义是表示在改变屏幕方向、弹出软件盘和隐藏软键盘时,不再去执行onCreate()方法,
    而是直接执行onConfigurationChanged()。如果不申明此段代码,按照Activity的生命周期,都会去执行一次onCreate()方法,而onCreate()方法通常会在显示之前做一些初始化工作。所以如果改变屏幕方向这样的操作都去执行onCreate()方法,就有可能造成重复的初始化,降低程序效率是必然的了,而且更有可能因为重复的初始化而导致数据的丢失。这是需要千万避免的。

    参考:
    Android学习笔记——关于onConfigurationChanged
    http://www.cnblogs.com/wisekingokok/archive/2011/10/06/2199948.html

    onConfigurationChanged信息处理 监听屏幕旋转 语言变换 键盘滑动 
    http://fghzhaopai.blog.163.com/blog/static/4780555620116882211560/

  • 相关阅读:
    浏览器低延时播放监控摄像头视频(EasyNVR播放FLV视频流)
    RTSP/Onvif摄像机在做H5无插件直播中遇到对接海康摄像机发送OPTIONS心跳的问题
    EasyDarwin系列互联网视频直播录像方案的选择
    EasyNVR配置需求
    EasyNVR硬件云终端与EasyNVR综合对比
    EasyNVR使用过程中问题的自我排查设备不在线问题自我排查检测
    EasyNVR在Linux系统下将录像文件与EasyNVR运行分离
    EasyNVR硬件云终端使用说明(问题的自我排查与解决)
    EasyNVR内网接入网关+EasyNVS云端管理平台,组件起一套轻量级类似于萤石云的解决方案
    EasyNVR支持的设备接入类型以及关于国标设备是否支持接入EasyNVR
  • 原文地址:https://www.cnblogs.com/Herzog3/p/5477955.html
Copyright © 2011-2022 走看看