Android 如何在应用程序安装后只执行一次后台任务

Android 如何在应用程序安装后只执行一次后台任务,android,android-service,android-workmanager,Android,Android Service,Android Workmanager,问题: 我有一个场景,我需要在第一次启动应用程序时将一些数据上传到服务器。即使用户立即退出应用程序,也应该完成上传任务。这项任务不需要总是完成,只需要在应用程序启动期间第一次完成 我所尝试的: 我目前正在为此使用一项服务。我在应用程序启动期间启动粘性服务,并在服务中执行此任务。所以,即使用户立即退出应用程序,我的服务也将重新启动,我将重试上传过程 但在这里,我需要在共享首选项hasUploadDone中保留一个布尔标志,以记住上载过程是否已经完成,并且我需要在每次应用程序启动时检查这一点,尽管大

问题: 我有一个场景,我需要在第一次启动应用程序时将一些数据上传到服务器。即使用户立即退出应用程序,也应该完成上传任务。这项任务不需要总是完成,只需要在应用程序启动期间第一次完成

我所尝试的:

我目前正在为此使用一项服务。我在应用程序启动期间启动粘性服务,并在服务中执行此任务。所以,即使用户立即退出应用程序,我的服务也将重新启动,我将重试上传过程

但在这里,我需要在共享首选项hasUploadDone中保留一个布尔标志,以记住上载过程是否已经完成,并且我需要在每次应用程序启动时检查这一点,尽管大多数情况下并不需要。 我认为这不是一个好办法。除了这个服务-布尔标志组合之外,还有什么更好的方法来处理这个场景吗?使用工作经理或其他更好的方法可以实现吗


提前谢谢

为此使用共享首选项:

在你的主要活动中

@Override
public void onStop() {
    super.onStop();
    SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    editor.putBoolean("previouslyStarted", true);
    editor.commit();
}
然后在onCreate方法中 如果您的应用程序在共享首选项之前启动,则会将先前保存的值保存为true,否则将默认为false

SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
previouslyStarted = saved_values.getBoolean("previouslyStarted", false);
使用if-else检查您的申请是否为首次陈述

if (previouslyStarted) {
    //App has been started previously.
}
else {
   //App started for the first time.
   //Upload your data here.
}

我认为你没有正确地阅读这个问题!!你的建议就是我目前所做的。我在寻求更好的解决办法。请仔细阅读问题。