2012-03-16 51 views
0

我已经搜索了很多关于我的上下按钮的解决方案,似乎无法获得任何工作。在程序中使用ImageButton时,我能够在出现OutOfMemoryError之前按下三个ImageButton。请任何帮助将是伟大的。内存不足 - 位图大小超出虚拟机预算

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; 
     } 
    }); 
} 

这里是logcat的:

threadid=1: thread exiting with uncaught exception  
FATAL EXCEPTION: main 
java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
android.graphics.Bitmap.nativeCreate(Native Method) 
android.graphics.Bitmap.createBitmap(Bitmap.java:477) 
android.graphics.Bitmap.createBitmap(Bitmap.java:444) 
android.graphics.Bitmap.createScaledBitmap(Bitmap.java:349) 
android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:498) 
android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:473) 
android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336) 
android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 
android.content.res.Resources.loadDrawable(Resources.java:1709) 
android.content.res.Resources.getDrawable(Resources.java:581) 
android.widget.ImageView.resolveUri(ImageView.java:501) 
android.widget.ImageView.setImageResource(ImageView.java:280) 
f7kidzCalc.com.KidzCalcActivity$1.onTouch(KidzCalcActivity.java:253) 
android.view.View.dispatchTouchEvent(View.java:3881) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent 
(PhoneWindow.java:1691) 
com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent 
(PhoneWindow.java:1125) 
android.app.Activity.dispatchTouchEvent(Activity.java:2096) 
com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent 
(PhoneWindow.java:1675) 
android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2194) 
android.view.ViewRoot.handleMessage(ViewRoot.java:1878) 
android.os.Handler.dispatchMessage(Handler.java:99) 
android.os.Looper.loop(Looper.java:123) 
android.app.ActivityThread.main(ActivityThread.java:3683) 
java.lang.reflect.Method.invokeNative(Native Method) 
java.lang.reflect.Method.invoke(Method.java:507) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
dalvik.system.NativeStart.main(Native Method) 

有一种简单的方法来收集垃圾,回收的图像或只是什么?我被卡住了。

+0

图像的大小是多少? – 2012-03-16 23:07:46

+0

每个ImageButton约有60kb – abotrix 2012-03-16 23:11:28

+0

尝试在主类中实现OnTouchListener方法,而不是使用内联类实例。尽管我怀疑这会有所帮助。 – akonsu 2012-03-16 23:31:40

回答

1

确保您没有将活动或上下文存储在程序的任何其他部分。这真让你的记忆管理混乱,并导致大量的泄漏。

好形式

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 
} 

基本上,我想说的是:

您可以使用诸如发送指向它大多数情况下图像尺寸不是问题,而是容易忽视的东西在这种情况下。

希望这会有所帮助。

祝你好运!

+0

谢谢。我看看在我的代码中是否有类似的东西.. – abotrix 2012-03-30 02:13:45

1

缩小您正在使用的图像的大小。我有确切的问题。我使用的图像是> 500kB。缩小的大小约为50-60kB。

+0

除了一个图像都在60kb以下或大约60kb ..我有一个320kb的背景图像,但我没想到一个问题... – abotrix 2012-03-16 23:10:39

+0

Howbig是像素图像?这是重要的。 – antlersoft 2012-03-16 23:14:37

+0

每张图片都是300x300px。我想在稍后使用平板电脑的按钮......在xml中,它位于80dip – abotrix 2012-03-16 23:17:48

相关问题