我有一个应用程序,我可以在服务器上提交时间状态。
为节省电量,我将状态项排在SQLite Database
之后,并定期向JobScheduler
提交IntentService
服务器。
插入项目的功能如下所示:
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());
期间被系统导致内存不足而被杀死,它有时会成功提交给服务器,但它不会被删除队列。
所以下次队列启动时会再次提交。
我该如何解决这个问题?
答案 0 :(得分:0)
嗯,在这种情况下,你可以做两件事之一