Android:当一个服务被杀死时,我们如何保存服务状态以供以后恢复?

2024-05-24

我们创建了一个应用程序,本质上是一个计时器/秒表,具有一些精心设计的功能。我们定义了一个服务,用于计时并提醒订阅某些计时器事件的侦听器(活动等)。

我们希望能够在 Android 终止我们的服务(用于内存回收)时保存计时器/秒表的状态(经过的秒数、距下一个事件的时间、用户提供的配置等),然后恢复服务的状态当用户恢复应用程序时。对于我们来说,这意味着可能保存和恢复对象及其状态。我们的服务中有很多成分。基本上,我们的服务由所有计时器模型组成,当服务终止时,计时器模型也会终止。

有哪些策略可以持久保存服务状态? PreferencesManager 对于我们的目的来说可能不够强大,尽管它可能是。我们可以依靠 Service onDestroy() 方法来保存状态(比如在 SQLite 中)吗?如果 android 决定终止我们的进程,是否可以保证调用 onDestroy() 服务?

谢谢你!


我们定义了一个服务,用于计时并提醒订阅某些计时器事件的侦听器(活动等)

您不需要让服务一直运行,看着时钟滴答作响。这种方法对用户不利,因为它无缘无故地占用系统 RAM。使用AlarmManager控制“某些计时器事件”,并在其余时间让您的服务保持在内存之外。

我们希望能够保存计时器/秒表的状态(经过的秒数、距下一个事件的时间、用户提供的配置等)

不要坚持“经过的秒数”。保留计时器/秒表开始时的时间。那么经过的秒数就是减法的问题。

不要坚持“直到下一个事件的时间”。坚持时间of下一个活动。

这些值不会持续变化,因此当计时器启动或计时器生命周期中的其他主要生命周期事件时可以保留。

有哪些策略可以持久保存服务状态?

使用数据库,SharedPreferences,或您自己选择的文件格式。

我们可以依靠 Service onDestroy() 方法来保存状态(比如在 SQLite 中)吗?

No.

如果 android 决定终止我们的进程,是否可以保证调用 onDestroy() 服务?

不保证会被调用。

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

Android:当一个服务被杀死时,我们如何保存服务状态以供以后恢复? 的相关文章

  • onBeaconServiceConnect 未调用

    和以前一样 我使用 Android Beacon 库 它已经工作了 我可以通过 BLE 低功耗蓝牙找到信标 但是现在 更新到最新版本的库后 现在方法onBeaconServiceConnect 不再跑了 请告诉我我需要做什么才能让它发挥作用
  • Manifest Merger工具:替换失败

    我正在使用一个使用自己的 android theme 的库 因此在构建时收到以下错误 错误 55 9 任务 contacit processDebugManifest 执行失败 清单合并失败 AndroidManifest xml 中的属性
  • 带有一、二和三个按钮的 Android 警报对话框

    我不经常发出警报 但每次发出警报时 我都会花一些时间来阅读文档 https developer android com guide topics ui dialogs html并弄清楚如何去做 由于我现在不得不这样做几次 所以我将在下面写一
  • 播放 SoundCloud 曲目

    我可以在 Android 应用程序中播放 SoundCloud 中的曲目吗 我正在尝试这段代码 但它不起作用 String res https api soundcloud com tracks 84973999 stream client
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 如何解决 Firebase AuthUi 中无法找到显式活动?

    使用 firebase UI 时 我无法找到显式活动类 com firebase ui auth KickoffActivity protected void onCreate Bundle savedInstanceState super
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • 如何在android中设置权限WRITE_SECURE_SETTINGS? [复制]

    这个问题在这里已经有答案了 我正在尝试启用 4 0 以上的辅助功能服务设置 但它显示异常 即 引起原因 java lang SecurityException 权限拒绝 写入安全设置需要 android permission WRITE S
  • Android 服务是否有办法检测设备何时锁定?

    我有一个 Android 服务 我希望在设备锁定时执行操作 我想澄清一下 我对屏幕开 关状态不感兴趣 我知道如何使用带有 Intent ACTION USER PRESENT 和 KeyguardManager inKeyguardRest
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • 如何在TableLayout中创建三列

    我正在开发一个使用的屏幕TableLayout 在这里我可以轻松创建两列 但我怎样才能创建三列呢 这里有一个例子
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • 使用 JobScheduler API 进行位置更新

    下面是我使用 FireBaseJobDispatcher 启动作业的演示代码 public class MainActivity extends AppCompatActivity Override protected void onCre
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • Android 中带有组的列表视图

    我有一个列表视图 每行都有一些日期和文本 我可以像 iPhone 中那样将这个 listView 分组 组之间有标题吗 在 android 中是否可能 请帮忙 即 我需要在 Listview 行之间有标题栏 以便如果我使用日期对其进行分组

随机推荐

  • kotlin 命令行编译器

    如何使用js命令行编译器 fun main args Array
  • 哪里可以找到蝗虫原木?

    我正在使用 Locust 对我们的应用程序进行压力测试 我收到错误 因为 POST 调用似乎不正确 在哪里可以看到蝗虫的日志 我想看看邮寄电话是什么样子 看看出了什么问题 这是我的代码 以防有人可以告诉我我做错了什么 from locust
  • [Bind(Exclude = "AlbumId")] 注解在数据验证中的作用是什么?脚手架是什么意思?

    我按照这个教程 http www asp net mvc tutorials mvc music store mvc music store part 6 http www asp net mvc tutorials mvc music s
  • 有什么办法可以自动生成UML图吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 MySQL 数据库 我想生成它的关系图 有没有一个工具可以连接到数据库并自动为我生成它 是的
  • iOS Javascript DOM“冻结?”

    这里有几个问题 有没有办法阻止 iOS 在滚动时冻结页面上的 javascript 当您在另一个选项卡中或切换应用程序时 iOS 是否会冻结 JavaScript iOS 上还有其他主要的 javascript 限制吗 iOS 6 x 会暂
  • 如何将“npm install”集成到 ASP.NET CORE 2.1 Docker 构建中

    我还没有找到一种方法来构建 ASP NET Core 2 1 Docker 映像 同时执行正确的操作npm install在构建过程中 My Dockerfile看起来像这样 从 Visual Studio 生成的 FROM microso
  • 使用 java 的 RAR 档案 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 C# 执行 Powershell commandlet 时出错

    我有以下经过测试且有效的代码 using new Impersonator Administrator dev dev RunspaceConfiguration runspaceConfiguration RunspaceConfigur
  • 为什么我的圈子值为零?

    这是我的 Circle 类代码 class Circle private double radius private double area public Circle double radius this radius radius pu
  • 静态构造函数中的 Database.SetInitializer() ?

    许多人可能知道为什么我们需要使用下面所示的代码 但是 我想将此逻辑分成几层 并且不想在 Web 层中引用实体框架 DLL 因此我最终将此代码放入我的静态构造函数中DbContext class 这是一个坏主意吗 这样做会对应用程序的性能造成
  • Firebase HTTP Cloud Functions - 读取数据库一次

    我有 Firebase HTTPs 功能 该函数需要根据查询参数从 Firebase 数据库读取值 并根据该数据返回结果 Firebase JS SDK 表示要使用以下命令来执行此操作 return firebase database re
  • Opencv 2.4.2 代码讲解-人脸识别

    我参考OpenCV提供的文档制作了一个人脸识别程序 可以识别多个人脸 并且工作正常 在文档中 他们制作了省略号来突出显示脸部 我不明白的是他们如何计算椭圆的中心 他们的计算如下 for int i 0 i lt faces size i P
  • 如何在 dbus-send 中使用变体字典 (`a{sv}`)

    我有一些麻烦dbus send使用时a sv 调用方法in signature a ss 似乎可以使用 以下命令行 dbus send dest org test TestService org test TestService objec
  • MongoDb 中的全局自增字段

    有没有办法在集合中创建全局自动递增的值 Perforce 有一个变更列表的概念 它可以成为无状态更新的强大功能 我正在考虑相同类型的功能 例子 create gt DocA name foo gt changelist 1 create g
  • Highcharts 奇怪的分组行为

    我正在使用延迟加载 http www highcharts com stock demo lazy loading加载 OHLC 数据的方法 在服务器端 我使用 Python MySQL 并有 4 个包含 OHLC 数据的表 时间间隔为 5
  • 使用 C# 使用 INF 文件安装 libusb 驱动程序

    我想在 Windows 安装程序安装过程中安装第三方 libusb 驱动程序 我使用 Visual Studio 2010 创建了此安装 我尝试使用 SetupAPI 和 DifXAPI 通过命令行安装此驱动程序 但没有任何反应 我预计会弹
  • 如何以全屏模式连接Linux CentOS 7虚拟机? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在从 Windows 8 1 从 Hyper V 连接到 CentOS 7 VM 全屏模式不起作用 我需要解决这个问题 其他虚拟机包括
  • Linq 查询可以从 Sql 数据库检索 BLOB 吗?

    Linq 查询可以从 Sql 数据库检索 BLOB 吗 他们是怎么出来的 LINQ To SQL 类为 SQL Server 中的所有二进制和 varbinary 字段创建 System Data Linq Binary 类型的属性 Bin
  • Java 9 中可以使用提前编译吗?

    As per JEP 295 http openjdk java net jeps 295 任何 JDK 模块 类或用户代码的 AOT 编译都是实验性的 JDK 9 中不支持 要使用 AOT 化的 java base 模块 用户必须编译该模
  • Android:当一个服务被杀死时,我们如何保存服务状态以供以后恢复?

    我们创建了一个应用程序 本质上是一个计时器 秒表 具有一些精心设计的功能 我们定义了一个服务 用于计时并提醒订阅某些计时器事件的侦听器 活动等 我们希望能够在 Android 终止我们的服务 用于内存回收 时保存计时器 秒表的状态 经过的秒