gpt4 book ai didi

Android位图缓存

转载 作者:行者123 更新时间:2023-11-30 04:10:53 24 4
gpt4 key购买 nike

我正在为我拥有的大量位图图 block 实现缓存。到目前为止我做了什么:

成功实现了 LRU 缓存系统,但是当必须从应用程序的资源中加载时,图 block 仍然加载缓慢。缓存目前有大约 85% 的命中率。

每当我必须从资源加载位图时,它仍然像我说的那样慢。考虑到这一点,我现在从异步任务加载位图。在此之前,一切都可以无误地加载,但速度相当慢。现在,它更快了,因为它不在主线程上工作,但我不可避免地遇到了 OOM 错误。这是我的异步任务的代码:

public class loadBitmap extends AsyncTask<Void,Void,Void>
{
Bitmap bit;
@Override
protected Void doInBackground(Void... params)
{
Options opts = new Options();
bit = BitmapFactory.decodeResource(reso, drawable, opts);
return null;
}

@Override
protected void onPostExecute(Void result)
{
// TODO Auto-generated method stub
drawLoadedBit(bit);
super.onPostExecute(result);
}
}

关于如何实现此功能以免出现内存不足错误的任何想法?由于这是在 draw 方法中调用的,我认为是对它的多次调用导致了它。感谢您的任何建议。

最佳答案

Refer to this link

他提供了一个关于使用再生位图的很好的教程。此外,要将位图与 View 分离[一旦 View 被处置],您可以@Override View#onRemovedFromWindow() 来回收位图。更进一步,如果您仍然有这个问题,您可以创建一个 BitmapPool,您可以在其中分配位图。您可以实现一个算法来计算位图的大小并释放旧位图,这将使您超过任意内存量(bitamp 内存大约是宽度*高度*4 + 应该是标称的对象大小)

关于Android位图缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10885496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com