【问题标题】:Run code ONCE on startup在启动时运行代码一次
【发布时间】:2012-10-19 14:08:31
【问题描述】:

我想在应用程序每次启动时运行一小段代码。我尝试了以下方法:

  • 在 Activity.onCreate() 中。但这不起作用,因为活动可能会在轮换时重新创建。
  • 创建 Application 的子类并在 onCreate() 中运行。这似乎也不起作用。它会在安装应用程序时执行,但不会在您退出应用程序并再次进入时执行。

有什么想法吗?

【问题讨论】:

  • @Amorogos:使用刷新处理程序以适当的时间间隔刷新那段代码
  • 但我只想在用户启动应用时运行一次。
  • 它应该做什么?这是一个时间问题吗?那么你可以比较最后一次执行的时间。

标签: android


【解决方案1】:

在您的主要活动中,声明一个静态布尔标志,您在运行启动代码时将其设置为true。在onCreate 中,仅当标志为false 时才运行启动代码。在onDestroy(或任何关闭生命周期方法中,就此而言),如果活动正在完成,请清除标志:

protected void onDestroy() {
    super.onDestroy();
    if (isFinishing()) {
        startedFlag = false;
    }
}

这将在活动结束时清除标志,但如果活动因配置更改而被销毁,则保持不变。

还有一个问题:Activity 的进程可能会在暂停时被终止,并且应用程序处于后台。在这种情况下,当用户尝试将应用程序带回前台时,系统重新创建活动时,标志将为false。如果这是一个问题,那么您将不得不使标志持久化。我建议为此使用共享首选项。

【讨论】:

  • 谢谢!我试图这样做,但缺少静态声明。
【解决方案2】:

这是How can I execute something just once per application start?的副本

  • 创建 Application 的子类并在 onCreate() 中运行。这 似乎也不起作用。它在应用程序运行时执行 已安装,但不是在您退出应用程序并进入时 又来了

您需要将代码放在构造函数中,而不是放在 onCreate() 方法中。检查这个答案:https://stackoverflow.com/a/13809300/2005891

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2016-12-26
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2013-01-04
    相关资源
    最近更新 更多