Java 关于如何在Android中加速这一点,有什么建议吗?

Java 关于如何在Android中加速这一点,有什么建议吗?,java,android,multithreading,optimization,listview,Java,Android,Multithreading,Optimization,Listview,在一项活动中,我正在这样做: 每分钟,我都会将GPS位置更新到云端 然后,在位置更新后,我下载了一个包含10个人和他们的图标的列表…并在列表中更新他们。(每个图标为80x80,约2Kb) 这是每分钟都要做的,一遍又一遍 我的问题是:它似乎有点慢?有时当我向下滑动列表时,它很慢?当我点击时,响应不是立即的…可能需要稍等一下 你认为我可以用多个“线程”或其他什么来解决这个问题吗?请告知。谢谢 编辑:当它将名称和用户图标加载到列表中时……它实际上是不可用的。列表冻结……您无法向上或向下滑动。当列表

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

  • 每分钟,我都会将GPS位置更新到云端
  • 然后,在位置更新后,我下载了一个包含10个人和他们的图标的列表…并在列表中更新他们。(每个图标为80x80,约2Kb)
这是每分钟都要做的,一遍又一遍

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

你认为我可以用多个“线程”或其他什么来解决这个问题吗?请告知。谢谢


编辑:当它将名称和用户图标加载到列表中时……它实际上是不可用的。列表冻结……您无法向上或向下滑动。当列表未加载时……列表滑动速度非常慢。

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

对于“在”活动中下载内容之类的操作,让后台服务为活动执行工作并保持响应总是很有用的!我可以向你保证,如果你试图在活动本身中做类似的事情,你肯定会在反应能力方面遇到麻烦!
所以:我的答案是——是的。实现一个后台服务

线程和缓存可能是好主意。如果您的列表只有十人(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;
}
}
mCachedList;
私有void onUpdate(位置){
DownloadTask refresh=新的DownloadTask(位置);
refresh.execute();
}

私有类DownloadTask扩展了AsyncTask。好吧,您只需将它们写入sd卡或其他什么东西。问题实际上取决于您如何检测图标是否出于某种原因需要更新。请查看@memonization或确实需要memonize的函数。简单的缓存策略对你来说是可行的。服务是一种方式,如果有意义的话,你仍然可以向服务添加缓存。