应用程序在后台被杀死时的应用程序生命周期

2024-02-18

关于我遇到的问题的一些背景:在我的应用程序中,我有一个单例对象,我经常使用它来访问网络调用的 id 和令牌等内容。有时,当应用程序在后台被终止时,这个单例就会失去其状态。但是,当应用程序再次打开并在某些情况下启动时Activity经过发射器Activity,单例为空。

我正在重构它,但一直在苦恼如何确保单例即使在应用程序重新启动时也始终存在,但我不确定什么Android当应用程序从后台重新启动时执行。

我浏览了我们在应用程序中使用的一些库的源代码(Facebook, Intercom)看看他们如何管理他们的单例以及为什么他们的静态变量似乎总是存在,并得出了一个理论。

因此,在正常的应用程序冷启动时,应用程序的行为如下:

Application.onCreate() -> Launcher.onCreate() -> Activity A -> Activity B

假设用户在ActivityB 和应用程序的背景。使用其他一些应用程序后,他们回到我的应用程序,但它在中间的某个时刻被杀死了。那么生命周期就变成了这样:

Application.onCreate() -> Activity B

我认为问题是我在启动器中初始化了单例Activity,因此,当 B 尝试从单例中获取值时,结果为 null。如果我初始化单例Application.onCreate(),当再次拉起应用程序时,它总是会被初始化。它是否正确?

TL;DR 被终止并再次带到前台的应用程序将始终调用其Application.onCreate()然后直接转发到Activity它已经打开了。因此,对应用程序功能至关重要的应用程序初始化应该位于Application onCreate().


被杀死并再次带到前台的应用程序将始终调用其 Application.onCreate(),然后直接转发到其所在的 Activity。因此,对应用程序功能至关重要的应用程序初始化应位于应用程序 onCreate() 中。

Correct.

我认为问题在于我在 LauncherActivity 中初始化了单例,因此,当 B 尝试从单例中获取值时,它会出现 null。如果我在Application.onCreate()中初始化Singleton,那么当应用程序再次启动时,它总是会被初始化。它是否正确?

就你而言,问题确实出在于此。然而,如果通过“结果为空”你的意思是单例实例是null那么这不是单例应该如何工作的。无论你从哪里调用单例的方法,它的实例都不应该是null.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序在后台被杀死时的应用程序生命周期 的相关文章

随机推荐

  • 字符串必须正好是一个字符长

    我有一个我认为很简单的问题 由于某种原因 以下代码生成异常 字符串必须恰好是一个字符长 int n 0 foreach char letter in charMsg Get the integral value of the charact
  • 2D 循环卷积与卷积 FFT [Matlab/Octave/Python]

    我试图理解 FTT 和卷积 互相关 理论 因此我创建了以下代码来理解它 代码是 Matlab Octave 但我也可以用 Python 来完成 In 1D x 5 6 8 2 5 y 6 1 3 5 1 x1 x zeros 1 4 y1
  • Android DataBinding 泄漏内存

    我正在使用数据绑定并且我已经声明了lateinit var对于绑定以及当我要使用不同的片段 Leaky canary 显示泄漏时 Fragment class HomeFragment BottomNavViewHostBaseFragme
  • SemaphoreSlim.WaitAsync 延续代码

    我的理解await关键字是下面的代码await合格的语句在完成后将作为该语句的延续运行 因此以下两个版本应该产生相同的输出 public static Task Run SemaphoreSlim sem TraceThreadCount
  • VSCode 中的 Python 路径

    我在 Mac OSX 10 14 2 上安装了 Anaconda 发行版 有了它 我安装了 VSCode 我将用它来编写 python 脚本 最近 我更新了 Anaconda 中的一些环境 VSCode 用于其集成终端的 python 路径
  • 为不同语言生成不同的 docpad 集合

    我想调整我的多语言 DocPad 博客 以便以 ru md 结尾的页面进入 ru 目录 以 en md 结尾的页面进入 en 目录 假设这是初始结构 src pages page1 ru md page1 en md page2 ru md
  • 如何检查json数组是否有值?

    我正在使用条件 if obj2 getString patronCheckoutInfo equals null 但它不适用于数组获取值的情况 例如 情况 1 当 json 获取 patronCheckoutInfo 的值时 ErrorMe
  • Python中的时间范围重叠算法

    我有一个包含不同 ID 开始日期和结束日期的列表 让我们说 5 d datetime 2010 9 19 0 0 0 d datetime 2010 9 19 0 5 10 6 d datetime 2010 9 19 0 0 0 d da
  • 如何在远程存储库上运行 Git 命令

    我正在尝试编写一个简单的 PHP 应用程序 它将使用终端命令从远程 Git 存储库检索一些信息 我不想创建本地工作副本或存储库 我只想从远程存储库读取信息 浏览树 提交历史记录 文件差异 下载文件 因此它将是只读连接 我需要做的是运行一系列
  • 标准加密文件格式有哪些?

    我对加密文件格式有点困惑 假设我想使用 AES 256 加密文件 我通过加密算法运行该文件 现在有了一个加密字节流 显然 我可以将该字节流写入文件 但任何第三方加密应用程序都不会理解它 因为它不期望只是原始的加密字节流 我可以将其写入什么文
  • 控制台应用程序中的命令行当前工作目录[重复]

    这个问题在这里已经有答案了 可能的重复 如何找出我的控制台应用程序在 C 中运行的目录 https stackoverflow com questions 97312 how do i find out what directory my
  • 如何对齐和居中输入字段?

    我有一个 HTML 表单 输入字段已经居中 但它们没有垂直对齐 我想让所有标签和输入垂直对齐 以便所有标签都在同一垂直线上 并且所有输入都在同一垂直线上 到目前为止 我所拥有的只是 div 内的字段 div class container
  • 更好的 Django 管理 ManyToMany 字段小部件

    我找到了 Django Admin 的默认设置models ManyToManyField小部件使用起来很麻烦 这是HTML 选择 http www htmlcodetutorial com forms SELECT MULTIPLE ht
  • mysql.server 启动时出现 PID 错误?

    我刚刚尝试使用自制程序 在 Mac OS X 10 6 上 安装 MySQL 但我在第一个障碍时遇到了问题 当尝试手动启动服务器 mysql server start 时 出现以下错误 ERROR Manager of pid file q
  • 在 CSS 中将内部 div 与右下对齐

    将我的内部 div 放在右下角的最简单方法是什么 div style width 200px height 200px border 3px FF6666 solid div style font weight bold text alig
  • 使用 RxJS 从多个 API 调用构建数据

    我试图更好地了解如何使用 RxJS 运算符来解决我遇到的特定问题 我实际上有两个问题 但它们很相似 我正在从 API 端点获取一堆文档 api v3 folders folderId documents我已经设置了具有执行此操作的功能的服务
  • 按下按钮时 GPIO 事件检测不给出输出

    以下 python 脚本应该等待按钮按下 打印按钮按下消息 然后退出 但是 当我按下按钮时 什么也没有打印 然后 当我按回车键时 脚本会打印 检测到按钮按下 然后停止 我如何修复此代码 以便在按下按钮时打印 检测到按钮按下 我按照教程制作了
  • 使用Guava Cache将数据持久化到硬盘

    我是番石榴缓存的新手 如何在缓存中创建以下内容 像平常一样将数据保存在内存中 当缓存的大小超过给定的数字时 它将把缓存中的数据持久保存在硬盘上的可配置文件中 这可能会有所帮助 扩展 Guava 缓存以溢出到磁盘 http www javac
  • 将参数传递给 data.table 聚合函数

    我有一个函数可以计算变量的加权平均值 并使用以下方法按时间段对其进行分组data table聚合语法 但是 我想以编程方式提供加权列的名称 有没有办法在仍然使用传统方法的情况下实现这一目标data table句法 功能wtmean1下面演示
  • 应用程序在后台被杀死时的应用程序生命周期

    关于我遇到的问题的一些背景 在我的应用程序中 我有一个单例对象 我经常使用它来访问网络调用的 id 和令牌等内容 有时 当应用程序在后台被终止时 这个单例就会失去其状态 但是 当应用程序再次打开并在某些情况下启动时Activity经过发射器