2015-07-21 44 views
-1

請仔細閱讀,因爲它有點複雜!如何僅使用Android服務調用函數1時間?

我有一個服務每5秒調用一次函數。現在我只想在這些函數中只調用一次特定的函數。所以我做了這個來檢查函數之前是否調用過。

private void checkFirstLaunchApp() { 
    final String HAS_RUN_BEFORE = "hasRunBefore"; 
    final String HAS_RUN = "hasRun"; 

    SharedPreferences runCheck = getSharedPreferences(HAS_RUN_BEFORE, 0); 
    Boolean hasRun = runCheck.getBoolean(HAS_RUN, false); 
    if (!hasRun) { 
     SharedPreferences settings = getSharedPreferences(HAS_RUN_BEFORE, 0); 
     SharedPreferences.Editor edit = settings.edit(); 
     edit.putBoolean(HAS_RUN, true); //set to has run 
     edit.apply(); //apply 

     //do that function 
     functionIWant(); 
     } 

    } else { 
     //do nothing 
    } 
} 

但問題是如果我關閉我的應用程序並重新打開它,該函數將不會再被調用。我想要的是,當我重新打開我的應用程序時,該功能將被再次調用一次。請告訴我該怎麼做?

回答

1

你必須重置HAS_RUN假內onStart()你的發射活動。
備用 擴展應用程序類,並創建全局變量:

public class MyApplication extends Application{ 
    public boolean hasRun; 
    public void onCreate(){ 
     hasRun=false; 
    } 
} 

獲取所有MyApplication

MyApplication app=(MyApplication)getApplication(); 
if(!app.hasRun){ 
    app.hasRun=true; 
    // do your stuff 
} 
+0

的實例,謝謝!非常明確的答案;) – Kakashi

2

使用全局變量,而不是SharedPreferences

0

字段變量是細,sharedpreferences不適合這種情況。

private boolean mIsCalled; 
... 
private void functionIWant() { 
    if (mIsCalled) return; 
    mIsCalled = ture; 
    // your function body 
} 
0

設置SharedPreference爲false onStop()方法:

SharedPreferences settings = getSharedPreferences(HAS_RUN_BEFORE, 0); 
    SharedPreferences.Editor edit = settings.edit(); 
    edit.putBoolean(HAS_RUN, true); //set to has run 
    edit.apply(); //apply 

打電話給你的方法onResume()方法:

checkFirstLaunchApp() 
相關問題