原作者:Kevin
在項目中需要啓用系統照相機來拍照。本來很容易的一個問題。但在適配中出現了問題。
簡單說一下問題:
有些手機拍照成功,有些手機拍完照後確定返回後activity數據丟失,被銷燬了。
問題查找:
經過代碼查找發現,當這些出問題的手機被調用系統手機拍照時,當前activity被銷燬了之後又被重新創建了。即Acitivity 執行了ondestory()-->onCreate(),所以Activity被重新創建了從而內部的數據丟失,而按照正常的邏輯該Activity應該入後臺堆棧。一開始以爲是系統啓用照相機內存不夠自動銷燬回收。可有些手機不會出現該問題。很無奈。
之後經過本人細心研究activity的生命週期才恍然大悟,原來當手機橫豎屏時系統會重新創建一個activity,這就是爲什麼上個activity會ondestory()-->onCreate()。但爲什麼有些手機會執行有些不會呢。問題就出在橫豎屏上。因爲有些手機的系統照相機弄的很炫會自動旋轉90度,從而導致了橫豎屏的發生(--!看來最潮的也不是好東西,苦了我們這些碼農)。這就是爲什有些手機會發生有些不會。跟系統照相機是否旋轉有關係。
最後貼上解決方案。
AndroidMainifest.xml中加入
<activity
android:name=".Activity"
android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" />
複寫acitivity的onConfigurationChanged方法
@Override
public void onConfigurationChanged(Configuration newConfig) {
其實這裏什麼都不要做
super.onConfigurationChanged(newConfig);
}
===============================================================================================
2013-11-12 後續
最近做項目在又發現一些新的問題,記錄一下希望爲後面的讀者的指點迷霧。
由於系統版本造成的android:configChanges橫豎屏配置無效,先參考源碼
關於調用系統照相機Activity被銷燬問題解決
關於調用系統照相機Activity被銷燬問題解決
在level13以後加入了一個screenSize的屬性,這個屬性很重要如果在android3.2以後的版本中沒有添加"screenSize"的話依然會觸發橫豎屏activity銷燬週期(也就是說不能屏蔽activity銷燬,從而調用onConfigurationChanged方法,而在3.2之前只要設置orientation|keyboardHidden就可以)。由於智能機的迅速普及手機的系統大多數升級到4.0以上,這樣會導致很多沒有設置screenSize屬性的程序activity又出現銷燬情況。
試試如下代碼:
AndroidMainifest.xml中加入
<activity
android:name=".Activity" android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|screenSize"/>
複寫acitivity的onConfigurationChanged方法
@Override
public void onConfigurationChanged(Configuration newConfig) {
其實這裏什麼都不要做
super.onConfigurationChanged(newConfig);
}