1. 程式人生 > >從窗體洩漏談android:configChanges屬性

從窗體洩漏談android:configChanges屬性

首先看log日誌:has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{1f60f27e V.E..... R.....ID 0,0-388,240} that was originally added here.   android.view.windowleaked——即:窗體洩漏。

Android的每一個Activity都有個WindowManager窗體管理器,構建在某個Activity之上的對話方塊、PopupWindow也有相應的WindowManager窗體管理器。因為Dialog、PopupWindown不能脫離Activity而單獨存在著

,所以當承載某個Dialog或者某個PopupWindow正在顯示的Activity被finish()後,而Dialog(或PopupWindow)沒有正常退出的話,就會拋Window Leaked錯誤了,因為這個Dialog(或PopupWindow)的WindowManager已經沒有誰可以附屬了,所以它的窗體管理器就洩漏了。

根據此資訊分析出,在進入新的Activity時突然轉屏(哥們開發的sdk支援橫豎屏切換),因為在AndroidManifest.xml中沒有配置android:configChanges屬性,此時Activity會重新呼叫onCreate方法,即會重新呼叫整個生命週期,而此時的Dialog已經顯示並沒有dismiss,所以造成了窗體洩漏。解決的方法就變得如此簡單,

在AndroidManifest.xml中配置android:configChanges屬性,這樣當我們橫豎屏切換的時候會呼叫Activity的onConfigurationChanged方法,不會重新呼叫整個生命週期了。我們最後配置了android:configChanges="screenSize|orientation|keyboardHidden|navigation"。

android:configChanges屬性:

1、不設定Activity的android:configChanges時,切屏會重新呼叫整個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

2、設定Activity的android:configChanges="orientation"時,切屏還是會重新呼叫整個

生命週期,切橫、豎屏時只會執行一次

3、設定Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新呼叫整個生命週期,只會執行onConfigurationChanged方法

但是,自從Android 3.2(API 13),在設定Activity的android:configChanges="orientation|keyboardHidden"後,還是一樣會重新呼叫各個生命週期的。因為screensize也開始跟著裝置的橫豎切換而改變。所以在AndroidManifest.xml裡設定的MiniSdkVersion和 TargetSdkVersion屬性大於等於13的情況下,如果你想阻止程式在執行時重新載入Activity,除了設定"orientation", 你還必須設定" screenSize"。

附上android:configChanges屬性解釋:

VALUE                         DESCRIPTION                                                                                                                                                                                      
"mcc" 國際移動使用者識別碼所屬國家代號是改變了-----  sim被偵測到了,去更新mcc    mcc是移動使用者所屬國家代號
"mnc" 國際移動使用者識別碼的移動網號碼是改變了------ sim被偵測到了,去更新mnc    MNC是移動網號碼,最多由兩位數字組成,用於識別移動使用者所歸屬的行動通訊網
"locale" 地址改變了-----使用者選擇了一個新的語言會顯示出來
"touchscreen" 觸控式螢幕是改變了------通常是不會發生的
"keyboard" 鍵盤發生了改變----例如使用者用了外部的鍵盤
"keyboardHidden" 鍵盤的可用性發生了改變
"navigation" 導航發生了變化-----通常也不會發生
"screenLayout" 螢幕的顯示發生了變化------不同的顯示被啟用
"fontScale" 字型比例發生了變化----選擇了不同的全域性字型
"uiMode" 使用者的模式發生了變化
"orientation" 螢幕方向改變了
"screenSize" 螢幕大小改變了
"smallestScreenSize" 螢幕的物理大小改變了,如:連線到一個外部的螢幕上

相關推薦

窗體洩漏android:configChanges屬性

首先看log日誌:has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{1f60f27e V.E..... R.....ID 0,0-388,240} that was orig

Android開發實戰(二十一):淺android:clipChildren屬性

.cn viewpage port 部分 lap ole 有一個 默認 版本 原文:Android開發實戰(二十一):淺談android:clipChildren屬性實現功能: 1、APP主界面底部模塊欄 2、ViewPager一屏多個界面顯示 3、........

Instant runAndroid替換Application和動態載入機制

轉自http://www.tuicool.com/articles/ZFbaaub Android studio 2.0 Stable版本中集成了Install run即時編譯技術,官方描述可以大幅加速編譯速度,我們團隊在第一時間更新並使用,總體用下來感覺,恩…也就那樣吧

Android屬性動畫.

1、前言 在我們體驗一款APP時,炫酷的動畫往往能讓使用者體驗大幅度提升。想當年我剛學Android的時候,無意中看到蘑菇街購物車的動畫效果,把我給激動得,非要在自己的APP中加入那動畫,記得當時用費了好大的勁...不提了,說多了都是淚... 先了解下,目前可以實現動畫的方

Android 記憶體溢位與記憶體洩漏

概念 記憶體溢位(Out of memory):系統會給每個APP分配記憶體,預設16M記憶體,每個手機廠商的預設值不一樣,當APP所需要的記憶體大於了系統分配的記憶體,就會造成記憶體溢位;記憶體溢位就是分配的記憶體被用光了,不夠用了。 記憶體洩漏(Memo

12306帳號洩漏使用者密碼安全

新聞回顧 12月25日聖誕節,據漏洞反饋平臺烏雲網顯示,大量12306使用者資料在網際網路瘋傳。本次洩露的使用者資料包括使用者帳號、明文密碼、身份證、郵箱等。 隨後,12306官方發表公告,稱經過認真核查,此洩露資訊全部含有使用者的明文密碼。12306網站資料庫所有使用者密碼均為非明文轉換碼,網上

零開始學Android自定義View之動畫系列——屬性動畫(3)

屬性動畫對補間動畫進行了很大幅度的改進,之前補間動畫可以做到的屬性動畫也能做到,補間動畫做不到的現在屬性動畫也可以做到了。因此,今天我們就來學習一下屬性動畫的高階用法,看看如何實現一些補間動畫所無法實現的功能。 ValueAnimator的高階用法 補間

Android記憶體洩漏&&實現殺不死的無介面後臺Service

以前看大神的部落格,都說沒有碰到過記憶體洩漏或者OOM就不算真正的搞過Android…以前我覺得這事離我還好遠…. 沒想到,這次真的是遇上了!! 專案需求是這樣的:app開機自啟,啟動之後app就一直在run,是一直run!(開機自啟,現在大概也就只有在AR

Android XML中的tools屬性

簡介 tools相當於xml中的輔助功能,舉個例子,你include一個xml,本xml是看不到介面顯示的,加了tools:showlayoutin=""就可以顯示了,還有scrollview正常我們

Android配置檔案後期開發可拓展性

1.為什麼使用配置檔案 專案中經常用到配置檔案,android中也包含很多配置檔案,比如local.properties、gradle.properties等專案自帶的配置檔案,也有開發自己維護的配置檔案,比如properties.properties. 配

Android Activity中ConfigChanges屬性的用法

正文 Value Description “mcc“ The IMSI mobile country code (MCC) has changed — that is, a SIM hasbeen

零開始學android<Bitmap圖形組件.四十七.>

alt getheight drawtext layout pla cin mas 簡單 制圖 android.graphics.Bitmap(位圖)是Android手機中專門提供的用於操作圖片資源的操作類,使用此類能夠直接從資源文件之中進行圖片資源的讀取。而且對這些圖

架構師之路--業務角度緩存的選型

inno 基於 時間限制 更新 負載 聚集 穿透 同步 寫入   想起來幾年前挺火的前島國國民女神學霸-小島方晴子。當時替她說話的人都很慘,導師被逼自殺。她收到的壓力侮辱不是常人可以想象的。但是她卻堅強的活著,去年還出了書。我去日本的時候,下了新幹線,前面有一群女學生,她們

CSS浮動屬性

情況 了解 特性 影響 並排 添加 float 下標 左右 要介紹css的float浮動屬性,就必須先了解一下標準文檔流 標準文檔流: 在沒有css的幹預下,塊級元素獨占一行,可以設置寬高,行內元素並排顯示,寬高自動填充。 HTML頁面的標準文檔流(默認布局)是:從

Android configChanges使用方法

port sca 顯示效果 style pos nbsp 初始化 重復調用 rac 1. 在manifest文件裏使用activity的默認屬性。橫屏豎屏時,惠重復調用onDestory和onCreate 造成不必要的開銷。Android默認如此應該是為了適配不

講故事啦, 實習期如何月薪600到2000【一】

奇怪 吃飯 orm 遠的 客戶 人物 改善 電話 media 【故事背景】 故事發生在2011年的6月底,那時的我,剛修完大三的課程,所有學分已經都修滿,也不準備考研,大四在學校,基本屬於浪費時間。 於是決定出去找一份實習的工作。在絕大部分同學都還在學校苦苦掙紮,到底是

Java熟練到Android入門

Coding med part new user 時間 header enc request 剛剛從學校出來,唉,從Java轉入Android。 當初老師告訴我們Android不重要,結果,Android的所有課不是在玩手機就是在說話,沒認真聽也沒認真看,作業也沒認真做,

Android layout屬性大全

android ont roi http 布局 csdn -name str tail 第一類:屬性值 true或者 false 1:android:layout_alignParentStart緊貼父元素結束位置開始 2:android:layout_alignPar

零開始搭建android框架系列(轉)

bsp andro hup 開始 blank class and lan com 網址:從零開始搭建android框架系列 githup:https://github.com/CameloeAnthony/Ant從零開始搭建android框架系列(轉)

Android中的組播(多播)

-1 ip協議 strong 多個 接受 端口 ui線程 nbsp 數據 組播使用UDP對一定範圍內的地址發送相同的一組Packet,即一次可以向多個接受者發出信息,其與單播的主要區別是地址的形式。IP協議分配了一定範圍的地址空間給多播(多播只能使用這個範圍內