android - IntentService 中的数据库操作导致应用程序停止、变得无响应并给出 ANR

标签 android retrofit android-intentservice jsonschema2pojo

我在警报管理器中使用 IntentService 每 15 秒触发一次。 我必须不断向服务器发送大量数据并在后台接收大量数据作为响应。 我必须遵循以下过程:

  1. 我正在通过查询从数据库中读取数据。

  2. 然后通过POJO架构转成Json。

  3. 使用 Retrofit 库将此 JSON 请求发送到服务器。

  4. 接收响应数据。

  5. 如果数据库中有任何更新,则通过某些查询将此数据插入我的数据库。

有没有替代方法?因为我正面临 ANR。 如果数据较少,则可以正常工作。但随着数据量变大,UI 停止并且应用程序变得无响应。

最佳答案

经过一番努力终于找到了解决方案:

我只是使用单独的进程来处理 Intent 服务。

在“ list ”文件中使用它

 <service android:name=".BackgroundSyncDataService"
        android:process=":my_process">
  </service>

描述:

名称前面的冒号前缀告诉 Android 该服务对其声明的应用程序是私有(private)的。如果不使用冒号,该服务将是一个全局进程,可以被其他 Android 应用程序使用。

在自己的进程中运行一个服务,会赋予它自己的内存地址空间,并且这个进程中虚拟机的垃圾收集器不会影响应用进程。

如果服务在其主线程中执行长时间运行的操作,则在其自己的进程中运行服务不会阻塞应用程序。

关于android - IntentService 中的数据库操作导致应用程序停止、变得无响应并给出 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941284/

相关文章:

android - 在 Android 中解析 Google Books JSON

flutter - 无法通过改造 flutter 生成 g.dart

android - 手机关机期间的 HTTP 调用

android - 整个应用程序生命周期中的 getWritableDatabase() 实例

java - JobIntentService 和 IntentService 有什么区别?

android - Sticky Service 和 Intent Service 在应用被销毁时被杀死

java - 在opengl es 2.0中绘制纹理

android - 如何在 android webview 中播放视频 URL

android - Xamarin 在启动应用程序时形成 ActivityIndi​​cator

android - Kotlin改型预期为begin_array,但在第1行为begin_object