2014-01-30 62 views
0

我想僅在我的應用程序第一次打開時運行某些功能。當活動結束並返回時,這些功能正在運行。我只想運行一次,當應用程序打開時。如何知道我的活動是否由Android打開?

問題是:當我運行我的應用程序,這第一個活動是打開的。然後我用意圖和finish()方法將此活動留給了另一個活動。當我返回到第一個活動時,代碼再次運行。我不想讓這段代碼再次運行,只有當我打開應用程序。

+1

還有什麼會打開你的應用程序? – codeMagic

+0

我在談論我的活動。其他一些活動打開我的活動。這是我從應用程序開始的第一項活動。我希望某個函數只在第一次打開時運行。 – Roland

+0

[看到這個答案](http://stackoverflow.com/questions/17974904/how-to-define-started-activity-when-relaunching-android-application/17975105#17975105) – codeMagic

回答

1

您應該創建一個使用SharedPrefences的類。

當應用程序第一次創建時,將值保存到SharedPreferences中。

您的應用程序打開時的任何其他時間只需檢查值是否存在於SharedPreferences中。

2

只運行一次的好方法是在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

+0

我不想只運行一次。我希望它在每次應用程序打開時運行。問題是:當我運行我的應用程序時,我退出了第一個活動,然後返回到此活動並重新運行此功能。 – Roland

0

你的問題是有點混亂,因爲你的狀態,你要的代碼只運行一次,但在另一個答案使用SharedPreferences,暗示此,你在評論中寫道

我不想只運行一次。我希望它運行的每個應用程序是 開放

如果您在啓動(根)活動的onCreate()把代碼時,該代碼將在每次活動啓動時運行。如果您將代碼放在onResume()中,那麼代碼將在您每次開始活動或運行到前臺時運行。

+0

那就是問題所在。每次活動開始時,我都不想讓代碼運行。我希望代碼只在第一次啓動此活動時運行。有一段時間我放棄了這項活動並再次返回。我不想讓這段代碼運行。 – Roland

+0

解釋你的意思是「退出並再次返回」。這不清楚。 –

+0

我運行我的應用程序,這第一個活動是打開的。然後我用意圖和finish()方法將此活動留給了另一個活動。當我返回到第一個活動時,代碼再次運行。 – Roland

1

這聽起來像你想要一個靜態變量。

雖然運行應用程序的進程仍然存在,但靜態變量將保留。如果VM死亡,靜態狀態將丟失。

由於當系統在您的活動在後臺時虛擬機將被系統銷燬時,系統無法保證,所以這不是一種簡單的方法,但對於您嘗試的操作可能沒有問題做。

相關問題