三星手機調用系統相機 activity被銷燬

原作者: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);
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章