Android 当用户滚动时,Listview项将从内存中删除位图
我正在开发一个android应用程序。我有一个包含列表视图的活动 列表视图有很多项,每个项都包含一个位图图像 由于列表非常大,包含大量图像,因此在加载位图时,在一些旧设备上会出现内存不足错误 因此,我正在寻找一种对旧设备执行以下操作的方法:Android 当用户滚动时,Listview项将从内存中删除位图,android,listview,Android,Listview,我正在开发一个android应用程序。我有一个包含列表视图的活动 列表视图有很多项,每个项都包含一个位图图像 由于列表非常大,包含大量图像,因此在加载位图时,在一些旧设备上会出现内存不足错误 因此,我正在寻找一种对旧设备执行以下操作的方法: 加载视图中(或视图附近)项目的位图 当用户向下滚动时,我加载他应该看到的位图,并删除现在隐藏的位图 因此,在任何时候,只有视图中(或视图附近)的图像才会加载到堆中,而其他图像不再在视图中时会被删除 有办法吗 其他信息: 我遵循了关于如何高效加载位图图像的
- 加载视图中(或视图附近)项目的位图
- 当用户向下滚动时,我加载他应该看到的位图,并删除现在隐藏的位图李>
- 因此,在任何时候,只有视图中(或视图附近)的图像才会加载到堆中,而其他图像不再在视图中时会被删除
非常感谢您的帮助您想搜索一些教程和“延迟加载”示例。
一个可能的例子是:
你应该考虑从谷歌I/O 2012查看样例库应用程序。您需要的一切都在那里实现
源代码在上提供,这是构建图库的唯一示例。你也应该看看RoMunGy的(开始),他用“代码> ListVIEW/CODE >解释性能问题,并教你如何高效地使用适配器。(ViewHolder模式和重用视图) 下面是GridView的RecycleListener(可从API级别1获得)。每当在RecycleBin的废料堆中放置视图时,RecyclerListener用于接收通知。此侦听器用于释放与放置在RecycleBin中的视图关联的资源@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.album);
mAdapter = new PhotoAdapter(this);
mGridView = (GridView) findViewById(android.R.id.list);
mGridView.setAdapter(mAdapter);
mGridView.setRecyclerListener(new RecyclerListener() {
@Override
public void onMovedToScrapHeap(View view) {
// Release strong reference when a view is recycled
final ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
imageView.setImageBitmap(null);
}
});
// Kick off loader for Cursor with list of photos
getLoaderManager().initLoader(LOADER_CURSOR, null, mCursorCallbacks);
}
使用类似的库可以为您提供缓存图像和内存管理的选项。您应该能够通过它设置最大缓存大小,并且它还负责在后台线程上加载图像
ListView负责回收您放入图像的视图,并在这方面简化内存。我可能会误解这一点,但延迟加载不只是为了加载图像,而不是删除已加载的图像吗?这取决于实现。也许默认情况下惰性加载是您描述它的方式,但我知道事实上提供的示例并非如此。您可以在UI模式应用程序中看到它(以及许多其他伟大的库):您是否尝试过实现视图持有者模式?