请仔细阅读,因为它有点复杂!
我有一个服务,每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
}
}
但问题是,如果我关闭我的应用程序并重新打开它,该功能将不再被调用。我想要的是当我重新打开我的应用程序时,该功能将再次被调用一次。请告诉我该怎么做?
答案 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()