2011-12-11 70 views
0

我有一個應用程序,它有一個主要的活動,在按鈕按下時調用其他活動。Android onSaveInstanceState並開始子活動。

主要活動託管一個包含大量數據並且可以分類的類。數據是應用程序的主幹,我需要將其保存在方向更改中。爲了達到這個目的,它使用onSaveInstanceState並將可放入對象放入包中。

但是,我已經注意到onSaveInstanceState在每次按下按鈕時都會調用,並啓動一個新的活動以及方向更改。這會略微減緩向其他屏幕的轉換。

當我知道活動將被銷燬而不是每次定期離開活動時,是否有一個很好的方式來存儲這些信息。我明白,離開主要活動的那一刻,有可能會被摧毀。

感謝, 中號<

+0

你想知道一個更好的方式來保存應用程序狀態的活動被銷燬之前?如果有的話可能是 –

+0

。我正在尋找這種方法,或者在活動剛剛進入後臺而另一個簡短活動被調用時不調用saveInstancestate。 – mAndroid

回答

0

對於原始值,你應該使用onSaveInstanceState。對於恢復,您可以使用onRestoreInstanceState或者您可以將某些代碼onCreate這樣的:

if(savedInstanceState != null) { 
    // restore old state 
} else { 
    // a fresh start 
} 

現在恢復像Bitmap等大型物體,如果他們不創造昂貴,而且不會使你的UI低迷,再次創建它們恢復。如果你不想說,然後使用onRetainNonConfigurationInstance和代碼看起來就像這樣:

@Override 
public Object onRetainNonConfigurationInstance() { 
    return bmp; 
} 

@Override 
public void onCreate() { 

    bmp = (Bitmap)getLastNonConfigurationInstance(); 
} 

警告:此API棄用,你可以使用它在舊平臺。我把它放在這裏是爲了說明的目的。新的做法更多地涉及到。

下面是詳細的參考文獻:

getLastNonConfigurationInstance

onRetainNonConfigurationInstance

爲新的API級別11和上述推薦的溶液:

「使用新的片段API setRetainInstance(布爾值),而不是;這也通過Android兼容性套件在舊版平臺上提供。「當你點擊上面的鏈接時,從文檔中選擇一小段代碼。

因此,您將在片段內創建位圖,並在片段上調用setRetainInstance,以便片段及其內容(在您的案例位圖中)將隨着配置更改而保留。

編號:

setRetainInstance

+0

你好,謝謝你的回答。看起來我需要做的是類似於onRetainNonConfigurationInstance的東西 - 什麼是未被棄用的方法? – mAndroid