android4.0 屏幕切换(避免重走Activity的生命周期)

最近在学习基于android4.0新增加的新特性ActionBar和Fragment的开发,在android4.0 系统中ActionBar是在启动Activity(ActionBar内置在其中)后都会展现的,一般是在Activity上方预留空间,最左侧显示应用程序的图标和标题。我们知道android2.3以前,应用程序的主Activity上方会预留一栏空白处显示应用程序标题。而4.0系统将这个空间转为操作栏空间(ActionBar)。关于ActionBar和Fragment的结合开发,此处不再累赘,后面自己将会整理出一两篇关于这两个知识点的文章。

重点主要是讲:在屏幕切换时,然后通过设置一些属性,避免Activity重走生命周期,也就是在屏幕切换时,原本Activity会在屏幕切换的同时对之前的Activity销毁,然后再走一次生命周期建立Activity,这样的话,在我通过ActionBar开发一个有Tab导航选项栏的应用程序的时候(每个Tab选项的内容对应一个Fragment对象获取的布局展现的资源,Fragment的生命周期是跟随其宿主Activity生命周期改变的)。应用程序启动时,默认是开启第一个Tab选项的内容(即tab1被点击显示),然后再点击展现tab2,展现布局内容,这时候tab1失去点击操作,自然的,其相关资源也就消失了。当我把手机屏幕旋转时,问题出现了,tab1和tab2(tab2出现是正常的预想状态)的布局资源同时出现了。而我们的要求是只出现tab2。

说了这么多废话,上面的问题是怎么出现的呢?其实解决办法很简单(就是令Activity在屏幕旋转时,避免重走其生命周期),在AndroidManifest.xml文件里的<activity/>中添加Android:configChanges="orientation|keyboardHidden"属性(android2.3之前的版本),然后在类里覆写onConfigurationChanged()方法。好了,本人兴高采烈地去试了,尼玛啊,搞了半天,打了一上午的log找问题。还是没解决。

最后终于蛋疼地知道,原来android4.0系统,已经做了改变,因为当你切换屏幕时,屏幕尺寸也相应的改变了(这点可以从ActionBar菜单栏在横屏和竖屏上的展现看出来),所以其设置方式当然也会改变,,应在<Activity/>中添加Android:configChanges="orientation|screenSize“(android3.0以后的版本)。然后在Activity类里覆写onConfigurationChanged()方法。

自信是一个人的胆,有了这个胆,你就会所向披靡!

android4.0 屏幕切换(避免重走Activity的生命周期)

相关文章:

你感兴趣的文章:

标签云: