Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android IntentService中的数据库操作导致应用程序停止,变得无响应,并给出ANR_Android_Retrofit_Android Intentservice_Jsonschema2pojo - Fatal编程技术网

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

Android IntentService中的数据库操作导致应用程序停止,变得无响应,并给出ANR,android,retrofit,android-intentservice,jsonschema2pojo,Android,Retrofit,Android Intentservice,Jsonschema2pojo,我正在使用报警管理器中的IntentService每15秒触发一次。 我必须不断地向服务器发送大量数据,并在后台接收大量数据作为响应。 我必须遵循以下流程: 我通过查询从数据库中读取数据 然后通过POJO架构将其转换为Json 使用改型库将此JSON请求发送到服务器 接收响应数据 如果数据库中有任何更新,则通过某些查询将此数据插入我的数据库 有没有其他办法?因为我面对的是ANR。 如果数据较少,则其工作正常。但随着数据量越来越大,UI停止运行,应用程序变得无响应。经过一番努力,我终于找到了一个解

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

  • 我通过查询从数据库中读取数据

  • 然后通过POJO架构将其转换为Json

  • 使用改型库将此JSON请求发送到服务器

  • 接收响应数据

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

  • 有没有其他办法?因为我面对的是ANR。
    如果数据较少,则其工作正常。但随着数据量越来越大,UI停止运行,应用程序变得无响应。

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

    我只是使用单独的过程来为intent服务工作

    在“清单”文件中使用此

    
    
    说明:

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

    在自己的进程中运行服务会为其提供自己的内存地址空间,并且此进程中虚拟机的垃圾收集器不会影响应用程序进程。


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

    为了避免ANR,在使用IntentService时,有几个要点需要记住:

    • 不要在onCreate或onStartCommand中进行密集的工作-这两个命令仍然是UI线程
    • 不要在ResultReceiver中进行密集工作
    • 不要在服务中启动您自己的线程-它本身已经这样做了
    • 在手头的内容中做密集的工作
    • 设计您的体系结构,使您收到的唯一数据是已更改的数据
    • 避免移动到另一个进程-因为这会造成CPU和内存开销(对用户不好)
    另一种解决方案是切换到其他类型的服务并启动HandlerThread(或者只从后台线程启动服务本身,因为服务在启动它的线程上运行)

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