关于 android This window was lost 问题以及解决方案

本文介绍了在Android开发中遇到的'This window was lost'问题,该问题导致应用程序出现ANR和异常行为。作者通过复现问题并进行深入研究,发现问题是由于在启动界面使用网络请求导致的。解决方案是在每个Activity中使用singleInstance启动模式,但这种方法存在不便。最终,作者提供了一种在启动界面onCreate方法中加入特定判断的解决办法,有效防止了问题的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本地写的第一篇博客,写的不好希望大家不要喷,只是想把最实用的东西,和大家分享一下,下面进入正题。

最近公司这面做了一个项目,需要上小米的渠道,上了两次都退了回来,下载log日志,研究好久也没有问题,(第一次看小米的log日志,不怎么会看),后来发现和测试那面研究问题,自己发现一个问题(一会说什么问题),在网上查阅大量的资料,把此问题解决,以前遇到的坑,在网上基本上都能查到,也就没有写博客,这次查的真费劲,就自己写一篇博客,希望给遇到同样坑的伙伴们,一个方向吧。

问题:android This window was lost :(翻译:失去了xxx窗口)

出现个问题,不会再日志里面给你明确的写出来,日志里面会报ANR这个问题,ANR这个问题可大可小,这面我们不说(在网上搜索有很多大神,已经写的很清楚了)。

下面上图片:

FirstActivity这个Activity是启动界面,这个界面第一次,我们是请求的网络,上线出问题,因为公司就要一张固定的启动图,后来就直接在代码里面写死,还是出现ANR,这个就有点说不通了。

下面来说一下,android This window was lost :这个问题

在你初次安装软件界面完成后,直接在此界面打开你的应用程序,进入一个Activity_one,然后随机点击一个此程序的Activity_two,这是按home返回键返回桌面,再次点击APP图标,进入程序,这是我们心里都会默认我们此时应该进入刚才打开的Activity_two界面才对,但是没有,程序是直接进入启动图的界面(如果没有启动图界面,会直接进入主界面)。这时你在打开一个新的Activity_three,再次按home返回桌面,再次打开APP图标,进入程序,还是会进入启动界面,反复操作。

这时这个bug还没有完,你在按back返回键,会发现不会返回主界面,而是返回Activity_three界面,然后再次进入主界面,在按back,进入Activity_two界面,在按back按键,又进入主界面,再次按back按键,进入Activity_one界面,再次back按键,进入主界面,这个你在按back按键,才会退出我们的APP。

问了,好几个同行,他们都没有发现这个问题,以前没有注意过这个问题,按照我这面操作,他们的程序也是出现相同的问题。

之前也没有发现过相同的问题,这就很尴尬了。

下面开始说一下解决的思路和方向。

首先,想到的是Activity的四种启动模式,利用singlelnstance全局唯一模式,(这里不详细说启动模式,还不太懂的,可以去搜索一下)。在我们要开启的每一个Activity都利用此启动模式,但是有一个弊端,我们写一个程序,会有很多很多的Activiti,不可能都有啊,太不方便了。

解决这个问题,一定可以利用代码解决。

下面开始上图:


在启动界面,onCreate方法里面加入此判断,我们的问题解决了。


其实这个问题,完全是我们程序猿自己引起的。以后再每次开发新的APP的时候,都加上判断就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值