Java 内存不足-位图大小超过VM预算
我已经为我的上下按钮寻找了很多解决方案,但似乎什么都没用。在程序中使用ImageButtons时,我能够在退出MemoryError之前按下三个ImageButtons。请告诉我任何帮助都会很好Java 内存不足-位图大小超过VM预算,java,android,memory,imagebutton,Java,Android,Memory,Imagebutton,我已经为我的上下按钮寻找了很多解决方案,但似乎什么都没用。在程序中使用ImageButtons时,我能够在退出MemoryError之前按下三个ImageButtons。请告诉我任何帮助都会很好 for(int i = 0; i < keys.length; i++) { keys[i].setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTo
for(int i = 0; i < keys.length; i++)
{
keys[i].setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
for(int down = 0; down < keys.lenght; down++)
{
if(v == keys[down])
{
keys[down].keys[down].setImageResource(drawIDDOWN[down]);
keys[down].setAdjustViewBounds(true);
}
}
}
if(event.getAction() == MotionEvent.ACTION_UP)
{
for(int up = 0; up < keys.length; up++)
{
if(v == keys[up])
{
keys[up].setImageResource(drawIDUP[up]);
keys[up].setAdjustViewBounds(true);
}
}
}
return false;
}
});
}
有没有一种简单的方法来垃圾收集、回收图像或其他任何东西?我被卡住了。缩小正在使用的图像的大小。我遇到了确切的问题。我使用的图像大于500kB。缩小的大小约为50-60kB。请确保您没有将活动或上下文存储在程序的任何其他部分中。这确实会扰乱内存管理,并导致大量泄漏 您可以使用以下方法向其发送指针: 良好的形式
public void doSomethingtoContext(Context c){
c.getApplicationContext()....//Variable 'c' only lasts for the length of the method
}
public static Context cOnText;
public void doSomethingtoContext(Context c){
cOnText = c; //DO NOT STORE THIS VALUE HERE
}
坏形式
public void doSomethingtoContext(Context c){
c.getApplicationContext()....//Variable 'c' only lasts for the length of the method
}
public static Context cOnText;
public void doSomethingtoContext(Context c){
cOnText = c; //DO NOT STORE THIS VALUE HERE
}
基本上,我想说的是,大多数情况下,图像大小不是问题,而是像这种情况下容易忽略的东西
希望这有帮助
祝你好运 图像的大小是多少?每个ImageButtontry大约60kb,用于在主类中实现OnTouchListener方法,而不是使用内联类实例。尽管我怀疑它是否有用。我不确定它是否能解决问题…如果您只是更改图像,选择器xml文件会更好,除非您有理由不使用一个,但一个图像小于或大约60kb。。我有一个320kb的背景图像,但我不认为这是一个问题…图像的像素有多大?这才是最重要的。每个图像是300x300px。我想稍后使用平板电脑的按钮…在xml中,它位于80dip@antlersoft:我没有缩小图像尺寸,但缩小尺寸后问题消失了。顺便说一句,我的图像是200x200px我现在使用选择器…好多了!