2010-07-14 86 views
0

我有一個Gallerywiew旋轉設備時保存緩存

我使用lazyload下載圖像,但是當我旋轉設備時,它會重新加載所有圖像並且不使用緩存。

如果我做android:configChanges="keyboardHidden|orientation"當前圖像的大小是最新的方向。

爲了讓圖像顯示全尺寸我做的:

Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)) 
          .getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 

回答

7

覆蓋onConfigurationChanged()是不鼓勵的,因爲你需要做很多工作才能做到正確。

你想要做的是在你的activity中實現onRetainNonConfigurationInstance()。這就是在系統知道它會在一瞬間重新啓動(例如,屏幕旋轉)時,在活動被終止之前調用的。你的onRetainNonConfigurationInstance()的實現可能會返回任何它喜歡的對象('this'是一個不錯的選擇,或者你的情況,你的緩存)。這個對象將被保存下來,並可用於下次調用您的活動。

在你的onCreate()方法中,調用getLastNonConfigurationInstance()來檢索系統爲你保存的對象。如果此函數返回null,則按照正常方式繼續。如果它返回非null,那麼這將是您先前從onRetainNonConfigurationInstance()傳回的對象,並且您可以從中提取您想要的任何信息。這通常意味着您不需要savedInstanceState包中的任何內容或保存的首選項。

我相信即使打開套接字,正在運行的線程和其他對象也可以通過配置更改來保存。


添加上:如果您this通過onRetaineNonConfigurationInstance(),不掛到它。您將保留大量資源被釋放。提取你需要的信息,然後釋放它。

+0

謝謝!這就是我要找的! – FoJjen 2010-07-18 22:34:31

0

當你旋轉屏幕,你去通過活動的生命週期。該活動通過onDestroy()並調用其onCreate()方法。您必須重做任何顯示計算並查看onCreate中的更改,並使用savedInstanceState來保留應用程序數據。

我希望這是你問

1

你需要重寫你的onConfigurationChanged事件。

在我的應用程序中,我正在播放音樂,當您翻轉手機時,它會停下來,然後我發現如果我覆蓋配置更改,我可以告訴它再次啓動計時器,沒有任何東西丟失。我完全知道你的想法,但這可能有助於你朝着正確的方向前進。

@Override 
      public void onConfigurationChanged(Configuration newConfig) { 
       super.onConfigurationChanged(newConfig); 
       startTimer(); 

      }