Android切换横竖屏不销毁前台Activity,也不影响后台Activity
在切换屏幕方向的时候,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的更多相关文章
- Android 切换横竖屏
一个项目一般会自己先定义项目是横屏还是竖屏但是也有可以横屏和竖屏之间切换的activty. 切换横竖屏的方法: //判断当前屏幕方向if(getRequestedOrientation() == Ac ...
- Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
最近在面试Android,今天出了一个这样的题目,即如题: 我当时以为生命周期是这样的: onCreate --> onStart -- ---> onResume ---> onP ...
- Android屏幕横竖屏切换和生命周期管理的详细总结
一般的我们去切换屏幕方向都是不希望Activity被重新创建,这时就需要对一些属性进行设置,或者使用代码设置. 今天想学一下Android屏幕横竖屏切换,但是网上很多知识不准确或不正确, ...
- Android的横竖屏切换
android的横竖屏切换,也会发生不少问题. 1. 锁定屏幕方向,禁止切换: 在AndroidManifest.xml中的Activity参数中加上 android:screenOrientat ...
- 避免切换横竖屏Fragment的重复加载导致UI混乱
当我们切换横竖屏时 Activity的生命周期就会重走一遍,自然 其中的Fragment的生命周期也就重新走了一遍,实践证明 当熄屏 再开屏时 Fragment的生命周期也会重走一遍 解决方案: an ...
- ListView 在设备切换横竖屏时保存状态
比如listview在设备切换横竖屏时,仍然需要保证position, activity - > onSaveInstanceState - > restoreInstanceState ...
- android限制横竖屏切换 方法
在需要限制横竖屏切换的时候,只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制. android:screenOrientation=& ...
- [Android Pro] 横竖屏切换时,禁止activity重新创建,android:configChanges="keyboardHidden|orientation" 不起作用
referece to : http://blog.csdn.net/mybook1122/article/details/24978025 这个网上搜索,很多结果都是: AndroidManifes ...
- 切换横竖屏的时候Activity的生命周期变化情况
关于这个,有个博客说得比较清楚:http://blog.csdn.net/wulianghuan/article/details/8603982,直接给出链接,哈哈哈.
随机推荐
- NPOI颜色对照表
颜色对照表:颜色 测试 Class名称 short Test颜色 Black 8 Test颜色 Brown 60 Test颜色 Olive_Green 59 Test颜色 Dark_Gr ...
- 【Mybatis】MyBatis之表的关联查询(五)
本章介绍Mybatis之表的关联查询 一对一关联 查询员工信息以及员工的部门信息 1.准备表employee员工表,department部门表 CREATE TABLE `employee` ( `i ...
- 配置了yum本地源
测试机不能联网 所以不能直接安装软件 只能配置本地源 1. 在联网的电脑上下载与Linux内核版本相同的镜像 2. 把此安装镜像放在此Linux测试机上 比如放在家目录下 /home/ ...
- Transform(变换)—Y轴lable内容旋转
<!DOCTYPE html> <html> <head> <style> div{ border:1px solid; } .bb{ position ...
- C语言在宏定义中使用语句表达式和预处理器运算符
语句表达式的亮点在于定义复杂功能的宏.使用语句表达式来定义宏,不仅可以实现复杂的功能,而且还能避免宏定义带来的歧义和漏洞.下面以一个简单的最小值的宏为例子一步步说明. 1.灰常简单的么,使用条件运算符 ...
- (25)Teach girls bravery, not perfection
https://www.ted.com/talks/reshma_saujani_teach_girls_bravery_not_perfection/transcript00:12So a few ...
- Executors创建的4种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...
- 1003 Emergency Dijkstra
这题做的心很累,我用的还是 1018的思路做的,但是 使用dfs 求最大人数对于某些有问题(现在也不知道错哪了), 看了别人的代码后才发现,其实完全不用这么麻烦,只需设置一个点的权重,一遍DJ(自创简 ...
- html图片上传阅览并且点击放大
关闭 qq_31540195的博客 目录视图 摘要视图 订阅 异步赠书:9月重磅新书升级,本本经典 程序员9月书讯 每周荐书: ...
- html或者jsp页面刷新问题
setTimeout(function(){window.location.reload();//刷新当前页面.},2000) window.location.reload();//刷新当前页面.pa ...