我想僅在我的應用程序第一次打開時運行某些功能。當活動結束並返回時,這些功能正在運行。我只想運行一次,當應用程序打開時。如何知道我的活動是否由Android打開?
問題是:當我運行我的應用程序,這第一個活動是打開的。然後我用意圖和finish()方法將此活動留給了另一個活動。當我返回到第一個活動時,代碼再次運行。我不想讓這段代碼再次運行,只有當我打開應用程序。
我想僅在我的應用程序第一次打開時運行某些功能。當活動結束並返回時,這些功能正在運行。我只想運行一次,當應用程序打開時。如何知道我的活動是否由Android打開?
問題是:當我運行我的應用程序,這第一個活動是打開的。然後我用意圖和finish()方法將此活動留給了另一個活動。當我返回到第一個活動時,代碼再次運行。我不想讓這段代碼再次運行,只有當我打開應用程序。
您應該創建一個使用SharedPrefences的類。
當應用程序第一次創建時,將值保存到SharedPreferences中。
您的應用程序打開時的任何其他時間只需檢查值是否存在於SharedPreferences中。
只運行一次的好方法是在SharedPreferences
中保存布爾標誌。
(您的活動)
public static final String PREFS_FILE = "prefs";
public static final String FIRST_OPEN_PREF = "firstopen";
...
SharedPreferences settings = getSharedPreferences(PREFS_FILE, MODE_PRIVATE);
boolean activityWasOpenBefore = settings.getBoolean(FIRST_OPEN_PREF, false);
if(activityWasOpenBefore) {
//Do something if my activity was open before
} else {
//Do something if this is the first time the activity is open
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(FIRST_OPEN_PREF, true);
editor.commit();
}
http://developer.android.com/guide/topics/data/data-storage.html#pref
我不想只運行一次。我希望它在每次應用程序打開時運行。問題是:當我運行我的應用程序時,我退出了第一個活動,然後返回到此活動並重新運行此功能。 – Roland
你的問題是有點混亂,因爲你的狀態,你要的代碼只運行一次,但在另一個答案使用SharedPreferences
,暗示此,你在評論中寫道
我不想只運行一次。我希望它運行的每個應用程序是 開放
如果您在啓動(根)活動的onCreate()
把代碼時,該代碼將在每次活動啓動時運行。如果您將代碼放在onResume()
中,那麼代碼將在您每次開始活動或運行到前臺時運行。
這聽起來像你想要一個靜態變量。
雖然運行應用程序的進程仍然存在,但靜態變量將保留。如果VM死亡,靜態狀態將丟失。
由於當系統在您的活動在後臺時虛擬機將被系統銷燬時,系統無法保證,所以這不是一種簡單的方法,但對於您嘗試的操作可能沒有問題做。
還有什麼會打開你的應用程序? – codeMagic
我在談論我的活動。其他一些活動打開我的活動。這是我從應用程序開始的第一項活動。我希望某個函數只在第一次打開時運行。 – Roland
[看到這個答案](http://stackoverflow.com/questions/17974904/how-to-define-started-activity-when-relaunching-android-application/17975105#17975105) – codeMagic