2017-01-20 51 views
0

我最近創建了我的第一個Android應用。這是一個非常簡單的應用程序,它有兩個計數器用於在IRL紙牌遊戲中爲兩個團隊保留分數。無論如何,如果用戶選擇訪問其他應用程序,而應用程序打開前例如。檢查WhatsApp,並讓應用程序在後臺運行,大多數情況下工作正常......如果用戶遠離應用程序很長時間,應用程序往往會重置爲默認狀態,這意味着分數計數器都是重置爲0,這是非常令人沮喪的。有沒有辦法來防止這種情況發生?就像將應用程序的狀態保存在內存中,直到用戶返回或類似的東西?應用計數器是基本的Textview對象。提前致謝!Android應用在空閒時間後重置

回答

0

你不能阻止你的進程被終止。如果您希望數據即使在流程終止後仍能存活,請將您的數據保存在數據庫,SharedPreferences或其他類型的文件中。

+0

您可以防止一個過程被終止:https://developer.android.com/guide/components/services .html#Foreground,但這可能不是這個用戶想要的。 – 01BTC10

+0

@ 01BTC10:這隻會增加過程將繼續存在的可能性。這不是一種保證,並且有辦法可以終止這個過程。 – CommonsWare

0

可以通過savedInstanceState變量保存/恢復狀態。

@Override public void onCreate(Bundle savedInstanceState) { } 

https://developer.android.com/guide/components/activities/activity-lifecycle.html

當用戶使用其他應用程序,則在onPause()的onStop()事件被調用。一段時間後,操作系統釋放內存並調用onDestroy()。這是您拯救任何州的最後機會。

+0

這個狀態只會持續很短的時間(約30分鐘左右)。這可能或可能不夠。 – CommonsWare

0

您需要的onSaveInstanceState實施和onRestoreInstanceState

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 

    savedInstanceState.putInt("int", 1); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    int myInt = savedInstanceState.getInt("int"); 
} 

或使用庫:IcePick

+0

謝謝。我如何準確使用它?我可以把它放到我的代碼中嗎?我很抱歉,我對此感到陌生,代碼對我來說看起來並不熟悉,所以不太確定該怎麼做。 – Hackermaan

+0

是的,你可以使用但設置你自己的變量: here savedInstanceState.putInt(「int」,1); and here int myInt = savedInstanceState.getInt(「int」); –