关于android:configChanges的属性的简介

Android系统默认的情况下,当“屏幕方向”或“键盘显示隐藏”变化时都会销毁当前Activity,创建新的Activity。如果不希望重新创建Activity实例,可以在AndroidManifest.xml中配置

android:configChanges="keyboardHidden|orientation" >

  这样就不会销毁重建了,在配置了这个属性后,android:configChanges 属性就会捕获“屏幕方向”和“键盘显示隐藏”变化,当捕获到这些变化后会调用Activity的onConfigurationChanged()方法。 
然而上面的配置只在android4.0之前的版本起作用,在android 4.0 以上不起作用,必须要加上screenSize,也就是说android 4.0以后的版本必须这样配置

android:configChanges="keyboardHidden|orientation|screenSize"

  

下面我们结合实例说orientation和onConfigurationChanaged方法

代码:

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "owen";

    //Activity创建时调用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG,"执行了onCreate方法");
    }

    //Activity创建或者从后台重新回到前台时被调用
    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG,"执行了onStart方法");
    }

    //Activity从后台重新回到前台时被调用
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG,"执行了onRestart方法");
    }

    //Activity创建或者从被覆盖、后台重新回到前台时被调用
    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG,"执行了onResume方法");
    }

    //Activity被覆盖到下面或者锁屏时被调用
    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG,"执行了onPause方法");
    }

    //退出当前Activity或者跳转到新Activity时被调用
    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG,"执行了onStop方法");
    }

    //退出当前Activity时被调用,调用之后Activity就结束了
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG,"执行了onDestroy方法");
    }
    //当指定了android:configChanges="orientation"后,方向改变时onConfigurationChanged被调用,并且activity不再销毁重建
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        switch (newConfig.orientation) {
            case Configuration.ORIENTATION_PORTRAIT://竖屏
                Log.i(TAG,"竖屏");
                break;
            case Configuration.ORIENTATION_LANDSCAPE://横屏
                Log.i(TAG,"横屏");
            default:
                break;
        }
    }
}

  在没有配置android:configChanges时,进行横屏和竖屏的切换时(在手机的设置中打开”自动旋转屏幕”选项)日志如:

从上面的日志中可以看出activity执行了销毁重建的过程,onConfigurationChanaged并没有被调用 
如果加上android:configChanges=”keyboardHidden|orientation|screenSize”再进行旋转日志如下:

从上面的日志中可以看出activity并没有执行销毁重建的过程,而调用了onConfigurationChanaged方法

转:http://blog.csdn.net/owenchan1987/article/details/53004474

时间: 2024-08-08 21:49:03

关于android:configChanges的属性的简介的相关文章

关于android:configChanges的属性(转)

一般在AndroidManifest.xml文件中都没有使用到android:configChanges="keyboardHidden|orientation"配置,当然还是很有用的. 就是如果配置了这个属性,当我们横竖屏切换的时候会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法,那当然如果不配置这个属性的话就会重新调用onCreate方法了,下面是测试 AndroidManifest.xml文件 <?xml

Android疑难杂症之android:configChanges=&quot;orientation&quot; 无效

通常情况下,当"屏幕方向"变化时会销毁并重建当前Activity.而我们有时候并不希望重新创建Activity实例,然后就会在AndroidManifest.xml中配置Activity: <activity android:name="com.example.MainActivity" android:configChanges="orientation" > android:configChanges="orientat

Android android:configChanges的简介

AndroidManifest.xml 文件中 ,在声明Activity时 ,会有这样一个属性设置 即 android:configChanges ,现在就来简单介绍下吧: 程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换.键盘的可用性等,这样的事情一发生,Activity会重新启动,其中的过程是:在销毁之前 会先 called  onSaveInstanceState()去保存你应用中的一些数据,然后called onDestroy(),最后才去called onCreate()或on

android:configChanges属性

对android:configChanges属性,一般认为有以下几点: 1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2.设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横.竖屏时只会执行一次 3.设置Activity的android:configChanges="orientation|keyboa

android:configChanges 属性注意事项

转屏时,配置了android:configChanges="keyboardHidden|orientation" 还是会调用oncreate ,原来是因为没有配置screensize属性导致. 参考:http://blog.csdn.net/huiguixian/article/details/8071821 在以前的版本中只要在AndroidManifest.xml文件中对activity指定android:configChanges="keyboardHidden|or

&lt;Android&gt;从窗体泄漏谈android:configChanges属性

今天有幸去哥们的大公司做了半天的临时工,一个偶现的Bug折腾了他好久,好不容易今天抓到了异常Log日志,大致的意思就是android.view.windowleaked--窗体泄漏.我在网上查了资料: Android的每一个Activity都有个WindowManager窗体管理器,构建在某个Activity之上的对话框.PopupWindow也有相应的WindowManager窗体管理器.因为Dialog.PopupWindown不能脱离Activity而单独存在着,所以当承载某个Dialog

android:configChanges属性总结

原文地址:http://blog.csdn.net/zhaokaiqiang1992/article/details/19921703 android中的组件Activity在manifest.xml文件中可以指定参数android:ConfigChanges,用于捕获手机状态的改变. 在Activity中添加了android:configChanges属性,在当所指定属性(Configuration Changes)发生改变时,通知程序调用onConfigurationChanged()函数.

Android configChanges使用方法

1.    在manifest文件里使用activity的默认属性.横屏竖屏时,惠重复调用onDestory和onCreate  造成不必要的开销.Android默认如此应该是为了适配不同的xml布局文件.又一次初始化资源,显示效果会好一些. 2. manifest文件里配置activity的属性: android:configChanges="orientation|screenSize" 在activity中将会回调函数: public void onConfigurationCh

android手机横屏和竖屏与android:configChanges

原文地址:http://woshixy.blog.51cto.com/5637578/1081913 目前大多数手机都支持重力感应随之而来的就是屏幕方向改变的问题.对应普通开发者来说屏幕的随意改变也会带来困扰.在Google自带的doc里可以看到,如果设备的配置(Resources.Configuration中进行了定义)发生改变,那么所有用户界面上的东西都需要进行更新以适应新的配置.因为Activity是与用户交互的最主要的机制,它包含了处理配置改变的专门支持.除非你特殊指定,否则当配置发生改