我在警报管理器中使用 IntentService 每 15 秒触发一次。 我必须不断向服务器发送大量数据并在后台接收大量数据作为响应。 我必须遵循以下过程:
我正在通过查询从数据库中读取数据。
然后通过POJO架构转成Json。
使用 Retrofit 库将此 JSON 请求发送到服务器。
接收响应数据。
如果数据库中有任何更新,则通过某些查询将此数据插入我的数据库。
有没有替代方法?因为我正面临 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/