簡體   English   中英

如何僅使用Android服務一次調用函數?

[英]How can I call function 1 time only with Android service?

請仔細閱讀,因為它有點復雜!

我有一項服務,每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次。請告訴我該怎么做?

使用全局變量代替SharedPreferences

onResume方法處理

您必須在啟動器活動的onStart() HAS_RUN重置為false。
備用 Extend Application類並創建全局變量:

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
}

字段變量很好,sharedpreferences不適合這種情況。

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

onStop()方法中將SharedPreference設置為false:

    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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM