gpt4 book ai didi

java - AsyncTasks 对于多个同时的网络操作来说太慢了

转载 作者:行者123 更新时间:2023-11-29 21:46:14 26 4
gpt4 key购买 nike

我正在开发一个必须与服务器大量交互的应用程序。

因此用户输入名称和密码并在授权后必须执行下一个任务:

  1. 应用程序必须为该用户获取所有传入和传出的消息,并将它们加载到 SQLite 数据库。
  2. 获取所有用户好友(带有 id、姓名、联系人数据的 JSON)并将其加载到应用的数据库
  3. 跳转到下一个 Activity 并显示来自本地数据库的收入消息。

    这个操作太慢了,当应用程序启动新 Activity 时,无法从数据库中获取任何内容:AsyncTasks 尚未完成。我被迫使用 AsyncTask.get() 以等待它们全部完成但这需要等待超过 16 秒!

    那么我应该怎么做:使用线程,或者在将获取的数据加载到数据库之前将其保存在内存中并在新 Activity 中显示它而不是从数据库中获取它?但即使没有数据库任务,其他抓取任务也需要等待近 10 秒!那我该怎么办?

最佳答案

好吧,这里有几件事很不对劲。

  1. 不要将 AsyncTasks 用于网络。使用服务。简而言之,这是因为您的 AsyncTask 将停止,一旦启动它的 Activity 将停止。这意味着网络请求很容易中止并且数据丢失并且必须在再次打开 Activity 时重新启动。

  2. 不要对 AsyncTasks 使用 .get()。这使得 UI 线程等待任务完成,使整个 AsyncTask 想法有点无用。换句话说:这会阻塞您的 UI。

你应该做什么:

  1. 阅读有关使用服务的信息。您还可以查看一个名为 RoboSpice 的优秀开源库来帮助您解决这个问题。

  2. 停止在 AsyncTasks 上使用 .get(),如果您想知道它何时完成,只需使用监听器即可。

  3. 尽可能在线程池 ( myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); ) 上执行 AsyncTasks。

关于java - AsyncTasks 对于多个同时的网络操作来说太慢了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com