线程和缓存可能是个好主意。如果你的列表只有十个人(10 × 2kB 的内存,20kB),那么考虑使用缓存列表来更新 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;
}
}
使用缓存列表来处理界面,直到后台任务完成并刷新。您还可以做更高级的事情来节省更多的内存,比如重用refreshlist等,但我希望以上内容提供了如何在后台中完成此操作的一些信息。同时,请记得在列表中重用convertview,以避免在滚动列表时对每个项进行大量的垃圾回收。