如何才能通过Android服务调用功能1次?

时间:2015-07-21 05:07:10

标签: android 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
    }
}

但问题是,如果我关闭我的应用程序并重新打开它,该功能将不再被调用。我想要的是当我重新打开我的应用程序时,该功能将再次被调用一次。请告诉我该怎么做?

5 个答案:

答案 0 :(得分:2)

使用全局变量而不是SharedPreferences

答案 1 :(得分:2)

使用onResume方法处理

答案 2 :(得分:1)

您必须在启动器活动的HAS_RUN内将onStart()重置为false 的替代 扩展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
}

答案 3 :(得分:0)

字段变量很好,共享偏好不适合这种情况。

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

答案 4 :(得分:0)

SharedPreference方法中将onStop()设置为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()