Android笔记之:onConfigurationChanged详解

2016-02-19 10:01 34 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享Android笔记之:onConfigurationChanged详解,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

  从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性:
代码如下:

android:configChanges="orientation|keyboard|keyboardHidden"

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  为了明白这个问题,特意写了一个Demo用于观察执行结果。  
代码如下:

public class ConsoleActivity extends Activity {
     private String str = "0";

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         //模拟数据初始化
         str = "1";
         Log.e("FHT", "onCreate:" + str);
     }

    

     @Override
     protected void onStart() {
         super.onStart();
         //模拟显示之后,数据发生改变
         str = (new Date()).getTime() + "";
         Log.e("FHT", "onStart:" + str);
     }

 

     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
         Log.e("FHT", "onConfigurationChanged:" + str);
     }
 }

运行结果如下:

  从上图可以看出,当屏幕方向发生了三次翻转,三次翻转都没有重新进入onCreate()方法,所以str的值得以延续,如果去除AndroidManifest.xml中关于onConfigurationChanged的相关代码,程序的执行顺序将发生变化,每次屏幕方向的变化都将引起str值的重置。这是大多数开发过程中所不希望看到的。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  另外需要注意的是onConfigurationChanged()方法中的:super.onConfigurationChanged(newConfig);一定不能省去,否则将引发:android.app.SuperNotCalledException 异常。

来源:https://www.tulaoshi.com/n/20160219/1593043.html

延伸阅读
HelloWorld的目录结构有: src :存放应用程序的逻辑代码,这里面的代码是人工写的 gen :存放资源代码,这里面的代码是自动生成的 assets :存放mp3等视频资源 bin :生成的可执行的二进制文件目录 libs :引用到的库,这里和bin/dexedLibs里面的目录是一致的 res :资源文件。往这个目录添加资源的时候,会被gen/R.java自动记录...
在Android的应用开发中,我们会用到各种代码调试;其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等,下面我把握工作中碰到的几个常用命令和方法给大家演示实践一下。 1.logcat命令 这个命令最简单常用,可查看帮助,我不多说,如果需要打印时间,加...
1.需求     无论是在.net还是java平台,合理的分层架构是最普遍的模块化思路之一。     dll,jar文件无不风靡盛行,无处不在。     一天,tx团队和我说,我们现在要做android上做三个论坛的客户端,一个是新闻论坛,一个是文学论坛,一个是音乐论坛。除了数据,界面和很少的模块不一样,其他的...
这是个很简单的问题,但每次隔一段时间后使用起来总是会出点乱子。这里记录下Logcat的步骤: 1,在Activity里申明tag变量(名字其实是随便的,如下: private static final String tag="yan"; 2,需要使用logcat输出信息时: Log.i(tag, "屏幕宽度:"+display.getWidth()+" 屏幕高度:"+display.getHeight()); 3, 双击Logcat,点击“+”号 add...
顺序容器,它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。标准库里定义了三种类型:vector(支持快速随机访问)、list(支持快速插入、删除)、deque(双端队列)容器只定义了少量操作,大多数额外的操作由算法库提供。容器内元素的类型约束;1、元素类型必须支持赋值运算;2、元素类型的对象必须可以复...

经验教程

222

收藏

39
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部