在一项活动中,我这样做:
每分钟都会这样做,一遍又一遍。
我的问题是:它似乎有点慢?有时当我向下滑动列表时,它很慢?当我点击时,响应不会立即......并且可能需要稍微保留。
你认为我可以用多个“线程”或其他东西解决这个问题吗?请指教。感谢。
编辑:当它将名称和用户图标加载到列表中时...它实际上无法使用。该列表会冻结......而且您无法向上或向下滑动。当它没有加载时......列表会非常缓慢地滑动。
答案 0 :(得分:5)
对于像在“活动”中“下载”内容的操作,使用后台服务为Activity做工作总是有用的,然后保持响应!如果你试图在Activity本身中做这样的事情,你肯定会遇到响应问题,我可以向你保证! 所以:我的回答是 - 是的。为此实现后台服务!
答案 1 :(得分:2)
线程和缓存可能是好主意。如果您的列表只有10个人(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;
}
}
使用UI的缓存列表,直到后台任务完成并刷新。你可以做更高级的事情来节省更多的内存,比如重用刷新列表等,但我希望上面提供了一些关于如何在后台执行此操作的信息。还要记住在列表中重复使用convertview,以避免在列表中滚动时对每个项目进行大量垃圾回收。
答案 2 :(得分:1)
除非您设法在一个请求中下载所有信息,否则您将通过线程化来获得时间。此外,是否真的有必要一遍又一遍地下载图标?也许你可以缓存它们?