1. 程式人生 > >關於 android This window was lost 問題以及解決方案

關於 android This window was lost 問題以及解決方案

本地寫的第一篇部落格,寫的不好希望大家不要噴,只是想把最實用的東西,和大家分享一下,下面進入正題。

最近公司這面做了一個專案,需要上小米的渠道,上了兩次都退了回來,下載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的時候,都加上判斷就好了。