首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当进程/应用程序被杀死时,如何保证循环的执行?

当进程/应用程序被杀死时,如何保证循环的执行?
EN

Stack Overflow用户
提问于 2016-01-08 16:54:30
回答 1查看 63关注 0票数 0

当我的应用程序从服务器获取用户的日程安排时,它会执行以下操作:

  • 将其存储到数据库中(莫来特)
  • 删除通过警报管理器设置的所有本地通知。
  • 为计划中的条目创建新的本地通知。
  • 移除与条目关联的所有日历事件。
  • 创建与条目关联的新日历事件。

这需要2-4秒,这取决于时间表的大小。

但是,如果用户从任务窗口中杀死应用程序,那么它就会立即被删除,在循环的中间执行这些操作。这意味着一半的条目可以输入到数据库中,而不是一半。或者一半的通知/日历事件将被取消/创建,另一半则不会。

我试了很多东西

  1. 使用IntentService -它会随着活动一起被杀死(因为它们属于同一个进程)
  2. 使用带有Serviceandroid:process=":remote"使服务属于另一个进程,但事实证明,这两个进程都被杀死了。
  3. 使用带有Serviceandroid:process=":remote",然后让它在onStartCommand上返回START_REDELIVER_INTENT,但是它会立即被杀死,然后从顶部开始。

我还没有尝试过的唯一一件事就是使用通知startForeground,但这似乎是解决这个问题的一种非常残忍的方式,而且我仍然不确定这个过程是否会继续存在,即使应用程序被杀死了。

好的,也许我给DB操作添加了一些事务,如果它们被中断,让DB回滚它们。但是本地通知和日历事件呢,更不用说了--我想知道如何解决各种情况下的这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-08 17:06:27

当用户将您的任务从最近段中删除时,将调用Service#onTaskRemoved(意图)。你可以用这种方法做一些事情,但我不知道如果你试图等待其他的事情完成,会发生什么。

您已经提到了DB的交易记录。其他数据存储通常不是事务性的。你必须把你自己的交易放在上面。一个粗略的解决方案是编写一个单独的日志文件,其中包含即将写入的日历事件,将它们写入日历,然后删除日志。如果应用程序启动时日志存在,则删除其中的任何日历事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34682162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档