IntentService被系统杀死

我有一个应用程序,我可以提交一个服务器的时间状态。 为了节省电量,我将状态项列入SQLite Database ,并定期将JobScheduler提交给服务器。

插入项目的function如下所示:

  public synchronized void workThroughQueue() { try { for (QueueItem queueItem : getAllQueueItems()) { try { dao.insert(queueItem.getItem()); delete(queueItem); } catch (Exception e) { Log.e(TAG, "Queueitem konnte nicht verarbeitet werden: " + e.getMessage(), e); } } } catch (Exception e) { Log.e(TAG, "Queueverarbeitung nicht vollständig: " + e.getMessage(), e); } } 

服务(kotlin):

 class QueueService : IntentService(QueueService::class.java.name) { override fun onHandleIntent(intent: Intent?) { Log.d("QueueService", "Jobservice started") TimerecordQueue().workThroughQueue() DangerAllowanceQueue().workThroughQueue() ProjektEndQueue().workThroughQueue() PhotoUploadQueue().workThroughQueue() } } 

我的问题是,如果进程在dao.insert(queueItem.getItem());过程中被系统导致内存dao.insert(queueItem.getItem()); 它有时会成功提交给服务器,但不会被删除队列。

所以下一次队列开始的时候再次提交。

我该如何解决这个问题?

那么,在这种情况下,你可以做两件事情之一

  1. 插入后的服务在本地保存插入记录(在本地数据库中)作为布尔标志。 这将让你确定你的记录已经成功提交。
  2. 第二种方法是,当你打一个服务时,在服务器数据库插入记录之前检查记录是否已经存在。 正如我所看到你正在发送项目。 应该有某种物品ID。 检查服务器数据库是否存在针对项目标识的记录,如果是离开该记录。 这应该做的伎俩。