在我的一项活动中,我动态加载大量位图并在 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() 返回的值以下...但是这听起来太乱了。一定有更好的方法