Android IntentService中的数据库操作导致应用程序停止,变得无响应,并给出ANR
我正在使用报警管理器中的IntentService每15秒触发一次。 我必须不断地向服务器发送大量数据,并在后台接收大量数据作为响应。 我必须遵循以下流程:Android IntentService中的数据库操作导致应用程序停止,变得无响应,并给出ANR,android,retrofit,android-intentservice,jsonschema2pojo,Android,Retrofit,Android Intentservice,Jsonschema2pojo,我正在使用报警管理器中的IntentService每15秒触发一次。 我必须不断地向服务器发送大量数据,并在后台接收大量数据作为响应。 我必须遵循以下流程: 我通过查询从数据库中读取数据 然后通过POJO架构将其转换为Json 使用改型库将此JSON请求发送到服务器 接收响应数据 如果数据库中有任何更新,则通过某些查询将此数据插入我的数据库 有没有其他办法?因为我面对的是ANR。 如果数据较少,则其工作正常。但随着数据量越来越大,UI停止运行,应用程序变得无响应。经过一番努力,我终于找到了一个解
如果数据较少,则其工作正常。但随着数据量越来越大,UI停止运行,应用程序变得无响应。经过一番努力,我终于找到了一个解决方案: 我只是使用单独的过程来为intent服务工作 在“清单”文件中使用此
说明:
名称前面的冒号前缀告诉Android该服务对其声明的应用程序是私有的。如果不使用冒号,该服务将是一个全局进程,可以被其他Android应用程序使用
在自己的进程中运行服务会为其提供自己的内存地址空间,并且此进程中虚拟机的垃圾收集器不会影响应用程序进程。
如果服务在其主线程中执行长时间运行操作,则在其自己的进程中运行服务不会阻塞应用程序 为了避免ANR,在使用IntentService时,有几个要点需要记住:
- 不要在onCreate或onStartCommand中进行密集的工作-这两个命令仍然是UI线程
- 不要在ResultReceiver中进行密集工作
- 不要在服务中启动您自己的线程-它本身已经这样做了
- 在手头的内容中做密集的工作
- 设计您的体系结构,使您收到的唯一数据是已更改的数据
- 避免移动到另一个进程-因为这会造成CPU和内存开销(对用户不好)
<service android:name=".BackgroundSyncDataService"
android:process=":my_process">
</service>