在切换屏幕方向的时候,Activity默认会走销毁->重建的生命周期,而有时候我们不希望如此,就需要做些额外的设置了:

1、在AndroidMainifest.xml中对应的Activity标签中加入android:configChanges="keyboardHidden|orientation|screenSize"属性,例:

 <activity
android:name=".view.TestActivity"
android:configChanges="keyboardHidden|orientation|screenSize" />

这里是指定当keyboardHidden、orientation、screenSize这三种状态发生改变时,由我们的程序进行处理,而不是走系统的销毁->重建操作;另外,screenSize是在Api13+要求加上的;

2、重写Activity的onConfigurationChanged方法,例:

 @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 当前为横屏
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { }
// 当前为竖屏
else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { }
}

在此方法中,我们可以根据前面设置的keyboardHidden、orientation、screenSize这三种状态,判断并执行想要的操作,当然什么都不做也可以;

就这两步,问题已经解决了,每次切换屏幕方向将不会对Activity的生命周期造成影响,只会走onConfigurationChanged方法。但是!!!我碰到了个很神奇的东西:

Activity1跳转到了Activity2,并且Activity2已经做了如上处理,当旋转屏幕时,Activity2的确按照预想的执行,但是Log中怎么出现了Activity1的销毁->重建,这提莫就想不通了,经过一番地毯式查找,终于发现原因在Activity2的Theme属性中设置了<item name="android:windowIsTranslucent">true</item>,透明的Activity2导致了Activity1的重绘,所以去掉就好了,不知道这是不是windowIsTranslucent的一个bug,记得在其他地方好像也碰到过类似的后台Activity被重绘的问题,也是windowIsTranslucent的锅。

阅读原文

Android切换横竖屏不销毁前台Activity,也不影响后台Activity的更多相关文章

  1. Android 切换横竖屏

    一个项目一般会自己先定义项目是横屏还是竖屏但是也有可以横屏和竖屏之间切换的activty. 切换横竖屏的方法: //判断当前屏幕方向if(getRequestedOrientation() == Ac ...

  2. Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程

    最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...

  3. Android屏幕横竖屏切换和生命周期管理的详细总结

    一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置.        今天想学一下Android屏幕横竖屏切换,但是网上很多知识不准确或不正确, ...

  4. Android的横竖屏切换

    android的横竖屏切换,也会发生不少问题. 1. 锁定屏幕方向,禁止切换: 在AndroidManifest.xml中的Activity参数中加上   android:screenOrientat ...

  5. 避免切换横竖屏Fragment的重复加载导致UI混乱

    当我们切换横竖屏时 Activity的生命周期就会重走一遍,自然 其中的Fragment的生命周期也就重新走了一遍,实践证明 当熄屏 再开屏时 Fragment的生命周期也会重走一遍 解决方案: an ...

  6. ListView 在设备切换横竖屏时保存状态

    比如listview在设备切换横竖屏时,仍然需要保证position, activity - > onSaveInstanceState  - > restoreInstanceState ...

  7. android限制横竖屏切换 方法

    在需要限制横竖屏切换的时候,只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制. android:screenOrientation=& ...

  8. [Android Pro] 横竖屏切换时,禁止activity重新创建,android:configChanges="keyboardHidden|orientation" 不起作用

    referece to : http://blog.csdn.net/mybook1122/article/details/24978025 这个网上搜索,很多结果都是: AndroidManifes ...

  9. 切换横竖屏的时候Activity的生命周期变化情况

    关于这个,有个博客说得比较清楚:http://blog.csdn.net/wulianghuan/article/details/8603982,直接给出链接,哈哈哈.

随机推荐

  1. python搭建服务器时nginx的有关问题

    最近在学习Python服务器搭建的内容,网上大多是Windows环境下的,由于我使用的是Mac,为了不想装双系统折腾,就只好一步步采坑了.比较基础的我一步步记录下来, 1.安装nginx: brew ...

  2. Difference between Load / Stress / Performance Testing

    Load and stress testing are subsets of performance testing. Performance testing means how best somet ...

  3. numpy最值

    >>> a = np.arange(9).reshape((3,3))>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])&g ...

  4. py3.0第四天 函数

    列表生成 # -*- coding: utf-8 -*- # data =[1,2,3] # for index,i in enumerate(data): # print (index,i) # d ...

  5. 【竞价网站绝技】根据访客ip,页面显示访客所属城市的html代码(借用YY IP地址库)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  7. Java平台

    Java的平台无关性 不同的网络环境,操作系统 支持嵌入式设备 减少开发部署时间 Java自身的平台和语言 编译成class文件 可在Java虚拟机中运行,与外部环境无关(对虚拟机的依赖) 通过外部A ...

  8. Linux环境下Redis集群实践

    环境:centos 7 一.编译及安装redis源码 源码地址:redis版本发布列表 cd redis-3.2.8 sudo make && make install 二.创建节点 ...

  9. uboot中获取dts资源并操作gpio口

    设备树(DTS)的引入减少了内核为支持新硬件而需要的改变,提高代码重用,使得单个内核镜像能支持多个系统.    DTS作为U-Boot 和Linux 内核之间的动态接口,能够有效减少重复配置,共享于U ...

  10. Sql Server常用数据库函数小结

    查询验证存储过程是否存在 SELECT name FROM sysobjects WHERE  xtype = 'P' and name = '{0}' ----------------------- ...