Activity的四种加载模式及有关Activity横竖屏切换的问题
来源:互联网 发布:sql server 2012安装 编辑:程序博客网 时间:2024/05/20 03:05
standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D D C B A将会依次弹出栈而显示在界面上。
singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。
此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。
个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。
有关横屏和竖屏切换时,Activity生命周期的变化引起的错误的解决办法:
首先是要知道,如果在没有任何配置的情况下即默认情况下,由竖屏切换到横屏时又重新创建了一次Activity,即生命周期的执行顺序是:onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume(),但是从横屏切换到竖屏时,是重新创建了两次Activity,即生命周期的执行顺序是:onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume(),所以很显然,横竖屏切换时出现的错误和bug肯定是由于生命周期的变化而引起的,那怎样才能使横竖屏切换时,这些生命周期不变化,Activity不会被重新创建呢?方法如下:
解释一下:keyboardHidden隐藏键盘的目的就是有时候键盘的显示与关闭的变化影响Activity的生命周期。特别注意的是:screenSize,它是跟屏幕的适配有关的,在
低版本中可以不设置这个参数,但是在4.0以后,为了防止横竖屏切换时,生命周期的变化,必须加上这个参数。
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="net.loonggg.configchange"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="8"
- android:targetSdkVersion="17" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="net.loonggg.configchange.MainActivity"
- android:configChanges="orientation|keyboardHidden|screenSize"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
- Activity的四种加载模式及有关Activity横竖屏切换的问题
- Android学习记录(8)—Activity的四种加载模式及有关Activity横竖屏切换的问题
- 1Activity+多个Fragment模式下进行横竖屏切换的问题及解决方式
- Activity的横竖屏切换
- activity的横竖屏切换
- Activity的横竖屏切换
- activity的横竖屏切换:
- 【Activity】Activity的四种加载模式
- 关于 activity 的四种模式 横竖屏 简介
- 与屏幕有关的设置:禁止横竖屏切换;横竖屏切换不重启Activity;动态设置横竖屏
- Activity的启动模式和横竖屏切换
- Activity横竖屏切换问题
- activity 横竖屏切换问题
- Android横竖屏切换时Activity的生命周期问题
- 关于横竖屏切换时Activity生命周期的问题
- Android Activity 横竖屏模式切换时会被destroy的问题
- 横竖屏切换时候Activity的生命周期
- 横竖屏切换时候Activity的生命周期
- CC2541、CC2640 SNV Flash 读写
- [.Net码农]FastReport.NET WebReport标签使用教程
- LinkedList中的remove方法
- <蓝牙BLE>BLEcc2540开启广播的过程
- c++中,结构体和联合体的区别
- Activity的四种加载模式及有关Activity横竖屏切换的问题
- ViewDragHelper之拖动加载(类似淘宝)
- 网上收集的一些Xmanager注册码
- php简单对象与数组的转换
- 【网络流】最大流:PIGS【EK模板、建图题】
- ubuntu设置开机自动登陆与登录自动运行脚本
- git版本控制
- Oracle 中的四舍五入
- org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结