在我的一个活动中,我动态加载大量位图并在GridView中显示它们。存在超出堆大小和崩溃应用程序的风险。我需要一种可靠的方法来了解堆大小何时变得过大,停止加载位图并开始回收当前正在查看的位图。我尝试使用这个功能:
public int memoryPercent(){
Double alloc=new Double(Runtime.getRuntime().totalMemory()/1048576);
Double avail=new Double(Runtime.getRuntime().maxMemory()/1048576);
double per= (alloc/avail)*100;
int pr=(int)per;
Log.e("Memory used",Integer.toString(pr));
return pr;
}
当加载更多位图时,它返回一个确实增加的值。但是当位图被回收时它不会减少。我还有其他选择吗?
我已经考虑过计算每个位图的字节大小并添加它们以查看它们的总大小,然后将那些被回收的子目录用于尝试将它们的总大小保持在Runtime.getRuntime()。maxMemory()返回的值之下。 ..但这听起来太乱了。必须有一个更好的方法