文档章节

关于安卓屏幕切换的过程

yolinfeng
 yolinfeng
发布于 2015/02/24 11:19
字数 796
阅读 10
收藏 0

在activity加入属性android:configChanges="keyboardHidden|screenSize|orientation"

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

-----------------------------------


第一种:转屏时禁止当前activity销毁,不重新创建activity并调用onCreate()方法,办法是在 AndroidManifest.xml 文件中对 当前Activity 添加配置属性android:configChanges=”orientation|keyboardHidden”,既可以实现禁用,然后如果还想监听到转屏的动作,可以在当前Activity 内复写onConfigurationChanged() 方法,做一些操作。

第二种:在当前Activity中复写onSaveInstanceState(Bundle outState)方法,在此方法内,把Activity在销毁之前要保存的数据存入Bundle 中,然后在onCreate(Bundle savedInstanceState)savedInstanceState中,将存入的数据取出,或者不再onCreate取,复写onRestoreInstanceState()方法,在这里边取也可以,但要注意的是onSaveInstanceState()方法是在onPausse()之前调用,onRestoreInstanceState()是在onStart()之后调用,这样,也可以实现信息的延续,如下:

存入数据:
 
protected void onSaveInstanceState(Bundle outState) {
 
  super.onSaveInstanceState(outState);
   outState.putInt("state",state);
 }
 
取出数据:
 
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 
if(savedInstanceState!=null){
      state=savedInstanceState.getInt("state");
     }
 

 
或者复写
 
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
 
 state=savedInstanceState.getInt("state");
 
}
第三种:禁止转屏,只允许横屏或者竖屏,方法:在 AndroidManifest.xml 文件中对当前Activity 添加配置属性 android:screenOrientation=”landscape” ,(landscape是横向,portrait是纵向),这样当然可以实现转屏时,数据保留的实现,可是,有些应用对于转屏是客户的正常的需求和体验,这个方法就不可取了。

上面三种方法,网上都有很多资料,我在此只是给大家梳理一下。下面,我就可能遇到的问题,可能是导致你最后无法实现的问题做一下补充。

 

重点来了,必看!!!
第一:其实android3.2以上的机器在按第一种方法设置是不起作用的,必须加上screenSize才行,即设置为这样android:configChanges=”orientation|screenSize|keyboardHidden”才会起作用,网上很少有告诉你这样设置的,很多都是像我说的第一种方法那样设置,结果你设置来设置去就是不起作用,抓破脑袋也想不出为什么。

 

第二:如果你的activity是TabWidget中的一个activity,那么就算你按上面的那样设置,同样还是不起作用,你必须在主Activity中添加上面的设置,才起作用,这个我在网上没有看到任何的文章有提示这个,是我自己试出来,如果你不知道的话,同样可能导致你抓破头皮也想不出来。唉。。。程序员真是个死脑细胞的活啊(题外话)。

好啦,如果你按照这样的设置,基本上,你的问题可以解决了,如果你的问题还是无法解决的话,可以留言一起探讨。

© 著作权归作者所有

共有 人打赏支持
yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
Android7.0 分屏下 Activity 与 Fragment 生命周期(一)

小菜前段时间整理了一篇关于我们真的了解 Activity 与 Fragment 的生命周期吗?的小博文,整理了基础版的关于 Activity 与 Fragment 的生命周期。 后来又一次被一个大大神问到在 Android7.0...

阿策神奇
06/11
0
0
Android InstanceState详解

一、onSaveInstanceState 1. 代码示例: 当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。...

恰同学少年
2015/07/27
0
0
Android源码剖析之Framework层进阶版(Wms窗口管理)

本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 上一篇我们主要讲了Ams,篇幅有限,本篇再讲讲Wms,即WindowManagerService,管理窗口的服务。主要负责窗口的创建、删除、...

liuzxgeek
2016/08/26
0
0
Android一些关于分辨率和布局的设置

1、Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让App自动适应不同的屏幕呢? drawable- hdpi、drawable- mdpi、drawable-ldpi的区别: (1)drawable-hdpi里面存放高分辨率...

mutouzhang
2014/03/11
0
0
onSaveInstanceState和onRestoreInstanceState

本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用InstanceState保存和恢复数据功能、 Andr...

枫兮兮
2014/02/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部