[英]How to guarantee the execution of a loop when process/app is being killed?
当我的应用程序从服务器获取用户的日程表时,它执行以下操作:
这需要2-4秒,具体取决于计划的大小。
但是,如果用户在任务窗口中终止了该应用程序,则在循环的中间,将立即执行任何上述操作,以消除该应用程序。 这意味着一半的条目可以输入数据库,而另一半则不能。 或一半的通知/日历事件将被取消/创建,另一半-不会。
我尝试了很多东西
IntentService
它与活动一起被杀死(因为它们属于同一进程) Service
与android:process=":remote"
会使服务属于另一个进程,但是事实证明,两个进程都被杀死 Service
与android:process=":remote"
,然后让它在onStartCommand
上返回START_REDELIVER_INTENT
,但是它立即被杀死,然后从顶部开始。 我仍然没有尝试过的唯一事情是使用通知来startForeground
,但这似乎是解决此问题的一种非常蛮力的方式,而且我仍然不确定是否可以保证此过程仍然有效,即使该应用程序被杀。
好的,所以也许我将一些事务添加到数据库操作中,如果它们被中断,则让数据库回滚它们。 但是,本地通知和日历事件又如何呢?更不用说了-我想知道如何在各种情况下解决此问题。
当用户从最近任务中刷出您的任务时,将调用Service#onTaskRemoved(Intent) 。 您可以使用该方法执行某些操作,但是我不知道如果您尝试等待其他操作完成会发生什么。
您已经提到了数据库的事务 。 其他数据存储区通常不是事务性的。 您必须在其之上分层自己的交易。 粗略的解决方案是编写一个单独的日志文件,其中包含将要写入的日历事件,将它们写入日历,然后删除日志。 如果应用启动时日志存在,请删除其中的所有日历事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.