Android锁屏后主Activity的onDestroy方法被调用导致黑屏问题解决方案

原创 2014年01月22日 20:28:24


解决这个问题,花了我3个多小时,不停的出包,不停的实验,google一圈,最终找到了解决方案。这里总结一下,后面再碰到此问题的兄弟就可以绕过去了。

问题描述:

按下锁屏键(电源键),机器锁屏,看日志发现,主Activity先onDestroy()了,随即又onCreate(),但自己并没有调用该Activity的finish()方法。

解决方案:

   android:configChanges="orientation|screenSize">

看下面的列子

<activity android:name=".Main"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    android:screenOrientation="landscape"
    android:configChanges="orientation|screenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>


原因如下:

游戏本身是横屏,手机界面是竖屏,锁屏操作存在一个横屏转竖屏的过程,这个过程如果不加android:configChanges="orientation",Activity会自动重新走一遍它的生命周期,即先销毁再重新创建,加上后只会调用onConfigurationChanged。如果你的target > 13时,还必须得加上“ScreenSize”(If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize"    configuration, because it also changes when a device switches between portrait and landscape orientations.)。

在Google是的时候还发现了另一种情况,表现一样,但根本不是一回事,因为本身我测试的时候用得也是Galaxy s4,当时还小兴奋了一把。

这个情况是:三星手机有一个开发者设置,“不保留活动”,如果是选中的状态的话,Activity间跳转时,总把前一个Activity销毁。

这里有一篇详细的博文,大家可以看下:关于三星设备 Activity.onDestroy() 被调用。显示“开发者选项”


参考资料:

横屏切换竖屏Activity的生命周期及configChanges

Activity onDestroy() 调用研究



Android 防止锁屏后调用onDestroy()方法

今天在android项目中按电源键锁屏,然后解锁,发现子Activity关闭了,回到了主页,这个问题困扰了我很久,最后打log发现,在按电源键的时候,调用了子Activity的onDestroy()方...
  • zujitianya
  • zujitianya
  • 2015年10月07日 21:26
  • 180

Android锁屏后调用了ondestroy()方法,解屏后重新oncreate()的问题的解决方案。

当你按下power键后,屏幕锁屏。这时候Activity调用了onpause,ondestroy,回来时则重新oncreate(),而有时候你不想要重新create. 网上其他方法是在manif...
  • hunter_hb
  • hunter_hb
  • 2013年02月05日 16:13
  • 3121

android中按电源键锁屏然后解锁导致Activity调用onDestory以及如何防止锁屏 翻转屏幕也会触发的情况

设置AndroidManifest.xml中Activity的android:configChanges=”keyboardHidden|orientation|screenSize” Andr...
  • mzc0725
  • mzc0725
  • 2016年05月24日 14:55
  • 400

解决Android中按电源键锁屏然后旋转屏幕解锁onDestory被调用

解决方案Android中按电源键锁屏然后旋转屏幕解锁这个时候onDestory会被调用以及屏幕旋转时也会被调用,打印消息如下:09-01 09:27:30.900: D/TAG(27866): onC...
  • QQxiaoqiang1573
  • QQxiaoqiang1573
  • 2016年09月01日 09:59
  • 1138

android解锁屏时Activity生命周期的变化

最近做的忍者小鸡暗杀行动遇到按锁屏键再解锁时 进入游戏画面会特别卡的问题,后来打日志发现 锁屏再解屏时生命Activity的生命周期发生异常变化引起的,下面就具体来看下。 事先在GameActivi...
  • bingdongguke
  • bingdongguke
  • 2013年09月02日 14:36
  • 5135

cocos2d-x创建安卓项目,解决锁屏会黑屏

参考 http://blog.csdn.net/hahahacff/article/details/8518541
  • dj0379
  • dj0379
  • 2015年10月13日 11:56
  • 3030

android之禁止黑屏和锁屏

Introduction   常常我们开 发程序的时候我们不需要系统唤醒系统锁屏功能,比如我们在做xxxNowTV或XXX播放器这样的程序,用户有时候在看电视或视频的时候不希望系统的锁屏 ...
  • wangsfine
  • wangsfine
  • 2016年03月23日 16:29
  • 2950

关于锁屏和回到桌面的activity生命周期的疑问

前言因为朋友的一个问题引发了对这个问题的探索,当然一如既往的先去百度了一把:”锁定屏幕 activity的生命周期“,结果看了2篇比较靠前的帖子: 1、android锁屏和finish()后acti...
  • be_happy_mr_li
  • be_happy_mr_li
  • 2015年09月04日 15:45
  • 2044

Android横竖屏切换和灭屏亮屏时Activity的生命周期探究(1)

研究这个问题的初衷在于项目中碰到了一个问题:横屏的时候灭屏再亮屏,亮屏的时候用户可以清晰的看到先启动竖屏(过程1)再切换到横屏的过程,由于灭屏的时候onSaveInstanceState()保存的时横...
  • u012604322
  • u012604322
  • 2014年04月19日 09:10
  • 3598

解决Android中按电源键锁屏然后旋转屏幕解锁onDestory被调用

解决方案Android中按电源键锁屏然后旋转屏幕解锁这个时候onDestory会被调用以及屏幕旋转时也会被调用,打印消息如下:09-01 09:27:30.900: D/TAG(27866): onC...
  • QQxiaoqiang1573
  • QQxiaoqiang1573
  • 2016年09月01日 09:59
  • 1138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android锁屏后主Activity的onDestroy方法被调用导致黑屏问题解决方案
举报原因:
原因补充:

(最多只允许输入30个字)