【问题标题】:IntentService killed by systemIntentService 被系统杀死
【发布时间】:2017-11-30 13:53:00
【问题描述】:

我有一个应用程序,我可以在其中向服务器提交时间状态。 为了节省电池电量,我将状态项放入 SQLite Database 中排队,并定期将它们与启动 IntentServiceJobScheduler 一起提交给服务器。

插入项目的函数如下所示:

 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() 是那个 web 服务调用?
  • 是的,https请求到服务器
  • "用一个启动 IntentService 到服务器的 JobScheduler 定期提交它们" -- 你为什么不让你的JobService 来做这个工作?毕竟,您的方法不适用于 Android 8.0+,除非您将 IntentService 设置为前台服务,或者除非您非常确定 onHandleIntent() 将在不到一分钟的时间内完成。在您的JobService 中包含此代码不仅可以让您在工作完成时告诉JobScheduler,还可以为您提供更长的时间(约 10 分钟)来完成工作并解决 Android 8.0 后台服务限制.
  • 我在某处读到作业服务在主线程中运行,而在主线程中无法进行 Web 请求?

标签: android sqlite intentservice


【解决方案1】:

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

  1. 在插入后的服务中,将插入记录保存在本地(在本地数据库中)作为布尔标志。这将让您确定您的记录已成功提交。
  2. 第二种方法是,当您点击服务时,在插入记录之前在服务器数据库上检查记录是否已经存在。如我所见,您正在发送项目。应该有某种项目ID。检查服务器数据库是否存在针对项目 ID 的记录,如果是则保留该记录。 这应该可以解决问题。

【讨论】:

  • 服务器自己检查记录是否存在,如果存在则不插入。但恕我直言,我不认为那是“干净的”
  • 但它确保数据不会作为重复记录再次插入
  • 是的,服务器会这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多