本地写的第一篇博客,写的不好希望大家不要喷,只是想把最实用的东西,和大家分享一下,下面进入正题。
最近公司这面做了一个项目,需要上小米的渠道,上了两次都退了回来,下载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的时候,都加上判断就好了。