2016-01-23 62 views
-1

我正在使用Android Studio/java。如何將我的應用程序的狀態最小化?

我有一些自定義變量,當我的應用程序最小化時需要保存。我試圖創建一個Bundle,可以通過onSaveInstanceState()保存,這看起來可行。一旦應用程序再次處於活動狀態,問題就是檢索它。據我所知,我可以通過onRestoreInstanceState()和Oncreate()來獲得它。事情是從不調用onRestoreInstanceState(),並且從最小化狀態重新打開後不調用OnCreate()。

我希望能夠按主頁按鈕(目前似乎正確地保存該包),然後通過「最近」按鈕重新打開該應用程序。當我目前這樣做時,應用程序會重置,而我無法獲得剛剛保存的Bundle。我該怎麼做呢?

編輯:調用完成()不起作用。我的活動是另一項活動的重中之重,所以如果我這樣做,我只會在上一個活動中結束。

+0

[Android應用程序保留狀態,應用程序從最小化恢復後可能的重複](http://stackoverflow.com/questions/13683061/android-application-retain-the-state-after-the-app-is -restored-from-minimize) – piotrek1543

+0

不起作用。我的活動是另一項活動的重中之重,所以如果我這樣做,我只會在上一個活動中結束。 – user3026046

回答

0

我親愛的朋友,你必須使用共享偏好多數民衆贊成它。

(您問的問題小任務)

共享偏好

設定值------------->

SharedPreferences pref = 
PreferenceManager.getDefaultSharedPreferences(this); 
Editor edit = pref.edit(); 
edit.putString("username", "billy"); 
edit.putString("user_id", "65"); 
edit.commit(); 

get values ------------->

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); 
String username = pref.getString("username", "n/a"); 

還有其他一些S還(如果你想堅持你的數據)

Android框架提供了多種選擇和戰略的持久性:

共享首選項 - 輕鬆地將基本數據保存爲私有持久字典中的鍵值對。

本地文件 - 將任意文件保存到內部或外部設備存儲。

SQLite數據庫 - 在特定於應用程序的數據庫中的表中存儲數據。

ORM - 使用更高級別的查詢/更新語法描述並保留模型對象。

每個存儲選項相關聯的典型使用情況如下:

沙紅色首選項 - 用於應用程序首選項,鍵和會話信息。

本地文件 - 通常用於BLOB數據或數據文件緩存(即磁盤鏡像緩存)

SQLite數據庫 - 用於複雜的本地數據操作或原始速度

ORM - 用於在本地存儲簡單的關係數據以減少SQL樣板文件

+0

我有幾個需要保存的數組。 SharedPreferences似乎無法做到這一點。即使是這樣,這真的是最好的解決方案嗎? – user3026046

+0

@ user3026046還有一些其他的我的回答中也提到了 –

0

onSave/RestoreInstanceState是正確的方法,如果您只需要保存狀態(而不是persi將其存儲到本地存儲)。

您必須覆蓋protected void onSaveInstanceState(Bundle bundle)並使用參數中的Bundle添加更多數據。另外,請不要忘記撥打super.onSaveInstanceState(bundle)。重寫protected方法很重要,而不是public之一。 protected void onRestoreInstanceState(Bundle bundle)也一樣。您也可以在onCreate()中恢復狀態,但是您需要在那裏檢查null

如何正確實現正確行爲的教程可以在official Android training docs中找到。

+0

我不需要長期的數據。您正在描述我當前的代碼,其中存在保護void onRestoreInstanceState(Bundle bundle)永遠不會被調用的問題,並且在從最小化狀態打開時不會調用onCreate()。一切都會好起來的,只要我能把我的手放在保存的捆綁包上。 – user3026046

+0

未調用'onRestoreInstanceState()'時,活動並未首先被銷燬。在這種情況下,狀態應該像離開應用程序之前一樣出現(可以在調試器中檢查字段)。也許你自己重置其中一個生命週期回調中的字段? – patloew

0

onRestoreInstanceState()不會被調用,除非您的應用程序從內存中卸載(這不會在您立即返回時發生)。嘗試最小化它,然後打開幾個其他應用程序,然後嘗試重新打開你的應用程序 - onRestoreInstanceState()應該被調用。

請注意,當您更改設備方向(有用的測試)時,也總是調用onRestoreInstanceState()。

相關問題