【问题标题】:Any advice on how to speed up this in Android?有关如何在 Android 中加快速度的任何建议?
【发布时间】:2011-01-17 20:26:13
【问题描述】:

在一个活动中,我正在这样做:

  • 每分钟,我都会将 GPS 位置更新到云端。
  • 然后,在位置更新后,我下载了 10 个人及其图标的列表...并在列表中更新它们。 (每个图标为 80x80 和大约 2Kb)

这每分钟都在做,一遍又一遍。

我的问题是:好像有点慢?有时当我向下滑动列表时,它很慢?当我点击时,响应不是立即的……可能需要稍等一下。

你认为我可以用多个“线程”或其他东西来解决这个问题吗?请指教。谢谢。

编辑:当它将名称和用户图标加载到列表中时...实际上无法使用。列表冻结...您无法向上或向下滑动。当它不加载时...列表滑动非常缓慢。

【问题讨论】:

    标签: java android multithreading optimization listview


    【解决方案1】:

    线程和缓存可能是个好主意。如果您的列表只有 10 个人(10 乘以 2kB 内存,20 kB),那么请考虑为 UI 使用缓存列表并在每次下载后更新它。为此检查 Android 1.5 引入的 AsyncTask 类。一个简单的代码示例可能如下所示:

    mCachedList;
    
    private void onUpdate(Location location) { 
      DownloadTask refresh = new DownloadTask(location);
      refresh.execute();
    }
    
    private class DownloadTask extends AsyncTask<Location, void, ArrayList<ListItem> {
    
    protected ArrayList<ListItem> doInBackground(Location... params) {
      final ArrayList<ListItem> refreshlist = new ArrayList<ListItem>;
      Location location = params[0];
      sendToCloud(location);
      while(!done) {
        ListItem next = downLoadPerson();
        refreshlist.add(next);
      }
      return refreshlist;
    }
    
    protected void onPostExecute(ArrayList<ListItem> refreshlist) {
      mCachedList = refreshlist;
    }
    }
    

    使用 UI 的缓存列表,直到后台任务完成并刷新。你可以做一些更高级的事情来节省更多的内存,比如重用刷新列表等,但我希望上面提供了一些关于如何在后台执行此操作的信息。还记得在列表中重复使用 convertview 以避免在列表中滚动时对每个项目进行大量垃圾收集。

    【讨论】:

      【解决方案2】:

      对于像在 Activity 中“下载”内容这样的操作,让后台服务为 Activity 完成工作并保持响应总是很有用的!如果您尝试在 Activity 本身内做类似的事情,那么您肯定会遇到响应问题,我可以向您保证! 所以:我的回答是——是的。为此实施后台服务!

      【讨论】:

      • 服务是要走的路,如果有意义的话,您仍然可以向服务添加缓存。
      【解决方案3】:

      除非您设法在一个请求中下载所有信息,否则您将通过线程化来获得时间。另外,真的有必要一遍又一遍地下载图标吗?也许你可以缓存它们?

      【讨论】:

      • 好吧,您可以简单地将它们写入 sd 卡或其他东西。问题实际上取决于您如何检测图标是否出于某种原因需要更新。
      • 看看@memoization 或做memoize 的函数。适合您的简单缓存策略。
      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2012-12-16
      • 2019-06-11
      • 2010-11-20
      相关资源
      最近更新 更多