Handling runtime changes(二)自己处理Configuration change

Handling runtime changes(二)自己处理Configuration change

转载请注明:http://blog.csdn.net/liaoqianchuan00/article/details/24287423

自己来处理Configuration change

如果在configuration变化的时候你不需要更新resource,比如横竖屏切换的时候不需要更新UI,并且你需要避免重建Activity造型性能上得问题,你可以申明你的Activity自己来处理这些Configuration的变化。切记,自己来处理resource的更新将会很复杂,因为系统不会自动的帮你进行处理。所以不建议你自己来处理Configurationchange

要声明自己处理这些变化,你需要在Activity中声明android:configChanges属性。在onConfigurationChanged

被调用的同时,Resource对象也基于新的configration被更新了,所以你可以不用重启Activity来重新设置。

注意从3.2开始,屏幕横竖屏的切换也会导致screenSize的变化,所以在configChanges中也需要加入screenSize,比如:android:configChanges="orientation|screenSize"

 

例子:

现在我们要自己来处理语言的变化。所以在Activity的声明中加入,这里我们加入layoutDirection的原因是,如果在API17以上,语言的变化也同时影响着layoutDirection配置信息的变化,所以这两个都需要加入到configChanges中。

 

<activity

           android:name="com.example.androidtest.MainActivity"

            android:configChanges="layoutDirection|locale"

           android:label="@string/app_name" >

           <intent-filter>

               <action android:name="android.intent.action.MAIN" />

 

               <category android:name="android.intent.category.LAUNCHER"/>

           </intent-filter>

       </activity>

 

在Activity中加入,这里其实需要加入你对local变化的处理,比如重新设置文字等,如果不重新设置,因为你的Activity没有重新创建,所以还是会保持之前的语言文字:

       @Override

       publicvoid onConfigurationChanged(Configuration newConfig) {

              super.onConfigurationChanged(newConfig);

              Log.d("==========","newConfig.locale : " + newConfig.locale);

             

       }

 

测试

运行程序,程序中显示中文,按home,切换到系统设置页面,将语言改成英语,回到我们的应用程序。

查看log:

==========启动程序

04-21 22:13:46.629: D/==========(6141):MainActivity onCreate

04-21 22:13:46.649: D/==========(6141):MainActivity onCreate finish

04-21 22:13:46.649: D/==========(6141):MainActivity onStart

04-21 22:13:46.649: D/==========(6141):MainActivity onStart finish

04-21 22:13:46.649: D/==========(6141):MainActivity onResume

04-21 22:13:46.649: D/==========(6141):MainActivity onResume finish

==========Home

04-21 22:13:48.499: D/==========(6141):MainActivity onPause

04-21 22:13:48.509: D/==========(6141):MainActivity onPause finish

04-21 22:13:48.579: D/==========(6141):MainActivity onSaveInstanceState

04-21 22:13:48.579: D/==========(6141):MainActivity onSaveInstanceState finish

04-21 22:13:48.579: D/==========(6141):MainActivity onStop

04-21 22:13:48.579: D/==========(6141):MainActivity onStop finish

==========切换到系统设置界面,改变语言到英语,切换回我们的应用程序,Activity不会被重新调用,而只会调用onConfigurationChanged

04-21 22:14:00.049: D/==========(6141):newConfig.locale : en_US

04-21 22:14:00.049: D/==========(6141):MainActivity onStart

04-21 22:14:00.049: D/==========(6141):MainActivity onStart finish

04-21 22:14:00.049: D/==========(6141):MainActivity onResume

04-21 22:14:00.049: D/==========(6141):MainActivity onResume finish

 

如果不给Activity设置configChanges的属性,那么在这些configuration变化的时候,不会调用onConfigurationChanged函数,会销毁之前的Activity并且重新启动一个Activity。

 

因为有很多configuration的变化都可能导致重启应用,并且你也需要考虑用户离开应用程序界面后,应用程序被销毁,回来的时候也需要重回到之前的状态,所以你的应用程序应该总是可以被重新启动的,除非特殊情况,不应该使用这种方式来阻止Activity重启,

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值