【问题标题】:Call something once in app lifecycle?在应用程序生命周期中调用一次?
【发布时间】:2011-09-01 23:37:13
【问题描述】:

为了在应用的生命周期中只调用某个方法一次,而不是每次 应用程序启动,我应该在哪里放置这种方法?

onCreate() 还是其他地方?

【问题讨论】:

  • 在共享首选项中创建一个变量来计算应用程序打开时间,然后如果为 0,则调用方法快乐编码:D
  • 目前还不清楚您希望多久调用一次。该应用程序在手机上的整个生命周期中只有一次?或者每次应用程序被激活一次。 android 生命周期管理器可以杀死一个应用程序为另一个应用程序腾出空间。如果是这种情况,是否应该在下次启动应用时再次运行该方法?
  • 在应用的生命周期内一次。我以为这是从应用程序启动到被强制销毁的那一刻,但较低的答案让我感到困惑。

标签: android android-lifecycle


【解决方案1】:

它应该在 Application.onCreate() 中,由一些 SharedPreference 布尔变量保护。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(prefs.getBoolean("firstRun", true)) {            
    once(); // <-- your function
    prefs.edit().putBoolean("firstRun", false).commit();
}

【讨论】:

  • 现在,我很困惑。我虽然应用程序的生命周期是从它启动的那一刻到它被销毁的那一刻(移动关闭,Android OS 杀死它,等等)。在您的代码中,此方法将被调用一次。还是我错了?!
  • 每次启动应用程序时都会调用onCreate()。但是once() 方法将在每次安装时调用一次(或在生命周期中引用一次)。
  • 这无济于事......因为当您从应用程序管理器中清除应用程序数据时,即使应用程序没有被卸载,它也将成为一个新的生命周期
  • @Rauf,清除应用数据可视为卸载-重装流程。您几乎无法区分这两个事件。
  • @inazaruk 嗯..我只想找到那一点..请参阅以下内容:stackoverflow.com/questions/19005821/…
【解决方案2】:

您可以将其添加到onCreate(),并且仅在之前未初始化/调用过该方法时才调用该方法。

protected void onCreate(Bundle b) {
    if(shouldCall()) { // I know if the method has been called before
        callMethodJustOnce();
    }
}

如果您只想调用此方法一次,我会在此处查看大多数答案,推荐使用 Preferences。但是,如果您在每次应用程序启动时谈论一次,则应在 onCreate() 中实现,因为这仅应在应用程序初始化并启动后调用。

【讨论】:

  • “但是,如果您在每次应用程序启动时谈论一次,这应该在 onCreate() 中实现,因为这应该只在应用程序初始化和启动后调用。” - 这不完全正确。 onCreate 可以再次调用,例如当方向改变时,当前活动将被销毁并再次创建。
  • 我认为我们在谈论同样的事情。是的,onCreate() 将在方向更改时被调用,但onDestroy() 不是首先被调用吗?如果是这样的话,当onCreate() 再次被调用时,应用程序不会“复活”吗?
  • 否,因为您第二次没有从启动时启动应用程序,您只是在更新 UI 以适应新的方向。
【解决方案3】:

在共享首选项中创建一个变量来计算应用打开时间,然后如果为 0,则调用方法快乐编码:D

【讨论】:

    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多