当前位置: 首页 > 面试题库 >

检测首次运行

姜博
2023-03-14
问题内容

我正在尝试通过使用以下代码来检测我的应用程序之前是否已运行:

(这是我的默认Android活动)

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    if (savedInstanceState == null) {
        Log.w("activity", "first time");
        setContentView(R.layout.activity_clean_weather);
    } else {

        Log.w("activity", "second time");
        setContentView(R.layout.activity_clean_weather);
    }


 }

当我第一次运行该应用程序时,它表示是第一次,当我第二次,第一次,第三次,第一次运行时…。

我使用的是实际的Android设备,而并非每次都使用运行按钮。我使用Eclipse运行按钮运行该应用程序一次,然后关闭该应用程序并在手机上按其图标。

我的代码有问题吗?


问题答案:

savedInstanceState更像是在状态之间进行切换,例如暂停/恢复。它也必须始终由您创建。

在这种情况下,您想要的是SharedPreferences

像这样:

public static final String PREFS_NAME = "MyPrefsFile"; // Name of prefs file; don't change this after it's saved something

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); // Get preferences file (0 = no option flags set)
    boolean firstRun = settings.getBoolean("firstRun", true); // Is it first run? If not specified, use "true"

    if (firstRun) {
        Log.w("activity", "first time");
        setContentView(R.layout.activity_clean_weather);

        SharedPreferences.Editor editor = settings.edit(); // Open the editor for our settings
        editor.putBoolean("firstRun", false); // It is no longer the first run
        editor.commit(); // Save all changed settings
    } else {
        Log.w("activity", "second time");
        setContentView(R.layout.activity_clean_weather);
    }

}

基本上,我直接从存储选项的文档中获取了此代码,并将其应用于您的情况。早点学习是一个好概念。



 类似资料:
  • 问题内容: 我希望我的Java桌面应用程序知道用户是否在该PC上第一次运行它。由于jar文件可能在用户之间共享,因此我不想写入jar文件中的文件。显然有很多方法可以做到这一点,但是您会推荐什么呢?(它必须是跨平台的)。谢谢 问题答案: 尝试使用“首选项”及其systemRoot()或userRoot()方法来获取系统范围或特定于用户的首选项。

  • 问题内容: 当用户第一次打开我的应用程序时,我想显示一个欢迎屏幕。有什么方法可以检查Swift中应用程序的首次启动? 问题答案: 您可以在任何地方使用它来验证用户是第一次看到此视图。 注意:用户重新安装应用并首次启动后,此方法将返回。

  • 我是反应本地的新手,我正在尝试运行我的第一个helloworld项目。但是我得到了这个错误我怎么能解决这个问题? 运行jetifier将库迁移到AndroidX的信息。您可以使用“-no jetifier”标志禁用它。Jetifier找到了863个文件以转发jetify。使用4个工人。。。正在启动JS服务器。。。安装应用程序的信息。。。 失败:构建失败,有一个异常。 > 错误:无法确定任务“:ap

  • 问题内容: 我的问题很简单,我该如何识别首次申请?我认为可以通过在RMS中保存一些值并在应用启动时读取它并决定要做什么来实现。 但是没有更简单的解决方案吗? 问题答案: 据我所知,没有比这更简单的方法了,但这还是很容易的。

  • 所以我昨天从Gulp4.0开始,所以当我开始gulp时,他只在第一次运行时将我的sass编译成css。为什么这是我的 [22:36:57]正在启动“监视任务”...

  • 我有一个Java的计时器任务来生成每日报告。当我通过linux终端调用Java类(调度定时器任务),而不是在给定时间调度第一次运行时,它会在命令执行后立即运行。有人能建议为什么会这样吗... 我使用的计划它。 忘了补充一下,我使用的是java 1.5,这里是def方法 代码片段: