android横竖屏切换生命周期
2015-04-27 13:31
260 查看
前段时间在做项目的时候发现一个很奇怪的现象,在应用中按下锁屏键后再解锁,发现应用自动结束了。一开始以为是占用内存太多系统结束了应用,后来感觉这个很影响用户体验,决定自己查一下这个问题的根源。
仔细阅读代码后发现,确实是应用内有一处代码使得应用在锁屏后自动结束了。该处代码是在onCreate中通过keyguardmanager判断设备是不是处于锁屏状态,如果是锁屏状态则结束应用。打印日志后发现,每次解锁的时候都会重新onCreate一次,这个使我很不解,为什么每次解锁的时候都会重新走一遍activity的生命周期。这个问题困扰了我两天的时间没有想明,后来偶然间想到可能是横竖屏切换导致了该问题。由于我是做游戏的,且游戏是横屏的,锁屏后手机默认回到了竖屏的状态,当解锁后需要横屏一次,这个时候Android 3.2以上的版本会默认走一边activity的所有生命周期,就是由于这个原因导致了activity的重新创建,进而导致了调用onCreate里面的结束应用的代码,最终导致了解锁后应用被杀死的情况。
原因是找到了,这样子的用户体验是非常差的,所有需要寻找解决方案。在我所知道的知识范围内我无法解决,只好通过google,百度,stackoverflow上寻找答案。最后基本的解决方法就是在android:configChanges里设置”orientation|screenSize”,确保activity横竖屏切换时不调用onCreate函数。
这次解决的这个问题,看似简单,如果对android的机制不是很了解会找很久,我就掉进了这个坑里,希望看到我这边文章的你不要走我的老路。
最后感谢大家的支持,我会继续更新我的博客的,希望大家多多支持我!
仔细阅读代码后发现,确实是应用内有一处代码使得应用在锁屏后自动结束了。该处代码是在onCreate中通过keyguardmanager判断设备是不是处于锁屏状态,如果是锁屏状态则结束应用。打印日志后发现,每次解锁的时候都会重新onCreate一次,这个使我很不解,为什么每次解锁的时候都会重新走一遍activity的生命周期。这个问题困扰了我两天的时间没有想明,后来偶然间想到可能是横竖屏切换导致了该问题。由于我是做游戏的,且游戏是横屏的,锁屏后手机默认回到了竖屏的状态,当解锁后需要横屏一次,这个时候Android 3.2以上的版本会默认走一边activity的所有生命周期,就是由于这个原因导致了activity的重新创建,进而导致了调用onCreate里面的结束应用的代码,最终导致了解锁后应用被杀死的情况。
原因是找到了,这样子的用户体验是非常差的,所有需要寻找解决方案。在我所知道的知识范围内我无法解决,只好通过google,百度,stackoverflow上寻找答案。最后基本的解决方法就是在android:configChanges里设置”orientation|screenSize”,确保activity横竖屏切换时不调用onCreate函数。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.portorland" 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:screenOrientation="portrait" 横屏 android:screenOrientation="landscape" 自从Android 3.2(API 13),screen size也开始跟着设备的横竖切换而改变 如果你想阻止程序在运行时重新加载Activity,除了设置"orientation",你还必须设置"ScreenSize"。 解决方法: AndroidManifest.xml中设置android:configChanges="orientation|screenSize“ --> <activity android:name="com.example.portorland.MainActivity" android:configChanges="orientation|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> <!-- <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" > </uses-permission> --> </manifest>
<activity android:name="com.example.portorland.MainActivity" android:configChanges="orientation|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>
这次解决的这个问题,看似简单,如果对android的机制不是很了解会找很久,我就掉进了这个坑里,希望看到我这边文章的你不要走我的老路。
最后感谢大家的支持,我会继续更新我的博客的,希望大家多多支持我!
相关文章推荐
- android手机屏幕横竖屏切换禁止调用生命周期函数方法
- Android Activity 横竖屏切换的生命周期
- Android面试:横竖屏切换时候Activity的生命周期
- 你还在问android横竖屏切换的生命周期?
- Android中横竖屏切换时Activity的生命周期
- android横竖屏切换时候Activity的生命周期
- Android系统横竖屏切换时候Activity的生命周期
- Android横竖屏切换导致Actvivty生命周期变化和解决方法
- Android4.4.2下Activity在横竖屏切换时的生命周期
- android activity生命周期以及横竖屏切换问题
- Android 横竖屏切换 不重新走生命周期
- android:configChanges="keyboardHidden|orientation" 失效 Android横竖屏切换时生命周期都执行
- Android横竖屏切换时生命周期变化
- 横竖屏切换时候activity的生命周期 android:configChanges
- Android--横竖屏切换时候activity的生命周期
- Android屏幕横竖屏切换和生命周期管理的详细总结
- Android横竖屏切换以及生命周期管理
- android横竖屏切换时Activity的生命周期
- Android基础总结——Activity生命周期与横竖屏切换
- android设置横竖屏切换时生命周期不会改变