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

转载 2015年07月07日 17:26:28

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

2014-1-22阅读1398 评论2


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

问题描述:

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

解决方案:

   android:configChanges="orientation|screenSize">

看下面的列子

<span style="padding: 0px; margin: 0px; font-family: 'Microsoft YaHei'; font-size: 12px;"><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></span>


原因如下:

游戏本身是横屏,手机界面是竖屏,锁屏操作存在一个横屏转竖屏的过程,这个过程如果不加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解决Fragment中使用SurfaceView切换时闪一下黑屏的问题

重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码,于是就会用到Surfac...
  • sbsujjbcy
  • sbsujjbcy
  • 2015年09月24日 10:24
  • 7992

Android onDestroy方法执行延迟的原因

一整天过去,终于发现了自己项目中的这个问题所在,onDestroy方法执行延迟是因为——>页面跳转代码要放在当前Activity的finish()方法之前执行。 以下为整个事件的过程(仅作个人记录...
  • ganshenml
  • ganshenml
  • 2016年08月25日 17:14
  • 2424

android 系列问题记录(webview加载黑屏,页面不跳转,闪退等)

1、原始问题,android扫描二维码跳转到指定页面之后,定位信息不能正常获取,其它页面能正常获取到定位信息,纠结好半天,代码完整对比了一变,没啥不同的地方,最后发现是相关Activity没有集成ph...
  • ducp123
  • ducp123
  • 2016年10月31日 13:44
  • 1490

Android Fragment集成高德地图黑屏的问题解决方案

官方给的3.0Map的集成api说了: MapView 是 Android View 类的一个子类,它可以帮助您在 Android View 中放置地图,它是应用程序和窗口部件的基本构建类。...
  • yfloctar
  • yfloctar
  • 2015年12月15日 11:25
  • 4685

SurfaceView左右滑动切换黑屏问题解决方案

在项目中使用的是高德地图,放置MapView的Fragment和其他Fragment放置一个ViewPager中切换;当从MapView的Fragment切换到其他Fragment或者从其他Fragm...
  • u010949962
  • u010949962
  • 2015年07月24日 18:06
  • 3170

在设置了android:parentActivityName后,点击子Activity返回键,父Activity总会调用OnDestroy()的解决方案

最近查了很久这个事情,分享给大家, 原理很简单,一个Activity在manifet里声明了android:parentActivityName;这时候通过Activity左上角的返回按钮点击返回, ...
  • u010013573
  • u010013573
  • 2016年01月19日 23:44
  • 263

突出一个简单粗暴!Android Activity泄漏问题解决方案

测试跟你说你的XXActivity泄露了,你如何确认是否真的泄漏? 确认泄漏后,你又如何定位是哪里的问题导致内存泄漏? Android日常开发中,内存泄漏的重灾区就是Activity,相信这两个是...
  • xueyin0926
  • xueyin0926
  • 2016年07月15日 17:21
  • 117

Android Activity泄漏问题解决方案

  • u011866128
  • u011866128
  • 2016年07月15日 15:23
  • 143

简单粗暴!Android Activity泄漏问题解决方案

http://wetest.qq.com/lab/view/63.html 测试跟你说你的XXActivity泄露了,你如何确认是否真的泄漏? 确认泄漏后,你又如何定位是哪里的问题...
  • niu0147
  • niu0147
  • 2016年07月29日 12:13
  • 256

突出一个简单粗暴!Android Activity泄漏问题解决方案

测试跟你说你的XXActivity泄露了,你如何确认是否真的泄漏? 确认泄漏后,你又如何定位是哪里的问题导致内存泄漏? Android日常开发中,内存泄漏的重灾区就是Activity,相信这两个是...
  • w304970865rui
  • w304970865rui
  • 2016年07月15日 15:21
  • 284
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android锁屏后主Activity的onDestroy方法被调用导致黑屏问题解决方案
举报原因:
原因补充:

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