在切换屏幕方向的时候,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. mysql & sqlserver语法差异

    isnull   vs   ifnull dateadd  vs date_add limit vs  top

  2. oracle xe在centos下的安装(更)

    更:重新弄了一下,就两个地方要注意,一是hosts文件的主机域名解析,而是profile文件配置,需要从oracle文件里复制过去在profile最下面添加就行了 注:下面方法反正我是失败了,好像xe ...

  3. golang中数组指针和指针数组的区别

    func test(){ x,y := 1, 2 var arr = [...]int{5:2} //数组指针 var pf *[6]int = &arr //指针数组 pfArr := [. ...

  4. windows 子系统 linux wsl 开启ssh 服务

    原因 windows自带的终端操作丑陋,习惯xshell的操作 步骤 1.关闭windows自带的ssh服务,这个占用了22端口 2.wsl 安装ssh服务(使用的是ubuntu) sudo apt ...

  5. C++标准库之string返回值研究

    先说结论(不一定适用所有环境): 1) GCC默认开启了返回值优化(RVO),除非编译时指定“-fno-elide-constructors”: 2) 现代C++编译器一般都支持返回值优化: 3) s ...

  6. 关于字符的C++函数

    toupper(), tolower()不会改变原来的字符; 如果输入不是字母, 返回值跟原字符相同. isupper(), islower()..

  7. redis启动出现错误creating server tcp listening socket 127.0.0.1:6379: bind No error

    creating server tcp listening socket 127.0.0.1:6379: bind No error 的解决方案如下按顺序输入如下命令就可以连接成功 1. redis- ...

  8. text-decoration:[ text-decoration-line ] || [ text-decoration-style ] || [ text-decoration-color ] 默认值:

    css3中字体装饰,多样化的界面效果,: [ text-decoration-line ]:指定文本装饰的种类.相当于CSS2.1的 text-decoration 属性, 可取值:none | un ...

  9. 剑指offer面试题17:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...

  10. Java 动态字节码技术

    对 Debug 的好奇 初学 Java 时,我对 IDEA 的 Debug 非常好奇,不止是它能查看断点的上下文环境,更神奇的是我可以在断点处使用它的 Evaluate 功能直接执行某些命令,进行一些 ...