2011-01-13 36 views
0

我已经创建了一个Activity在那里我有一个Button检索库图像中的android

按下按钮,打开一个android Gallery。当我选择从库中的图像是表明它在我的ActivityImageView但选择后第二次出现以下错误存在的

01-13 17:55:25.323: ERROR/AndroidRuntime(14899): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

这里是源代码我使用:

public class MyImage extends Activity { 
    /** Called when the activity is first created. */ 
    Gallery gallery; 
    private Uri[] mUrls; 
    String[] mFiles=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

      File images = Environment.getDataDirectory(); 
       File[] imagelist = images.listFiles(); 

        mFiles = new String[imagelist.length]; 

          for(int i= 0 ; i< imagelist.length; i++) 
          { 
           mFiles[i] = imagelist[i].getAbsolutePath(); 
          } 
          mUrls = new Uri[mFiles.length]; 

          for(int i=0; i < mFiles.length; i++) 
          { 
           mUrls[i] = Uri.parse(mFiles[i]);  
          }  

          Gallery g = (Gallery) findViewById(R.id.Gallery01); 
          g.setAdapter(new ImageAdapter(this)); 
          g.setFadingEdgeLength(40); 
    } 

    public class ImageAdapter extends BaseAdapter{ 

       int mGalleryItemBackground; 
       public ImageAdapter(Context c) {  
        mContext = c;  
       } 
       public int getCount(){ 
        return mUrls.length; 
       } 
       public Object getItem(int position){ 
        return position; 
       } 
       public long getItemId(int position) { 
        return position; 
       } 
       public View getView(int position, View convertView, ViewGroup parent){ 
        ImageView i = new ImageView(mContext); 

        i.setImageURI(mUrls[position]); 
        i.setScaleType(ImageView.ScaleType.FIT_XY); 
        i.setLayoutParams(new Gallery.LayoutParams(260, 210)); 
        return i; 
       }  
       private Context mContext; 
       }  
} 

回答

1

我也遇到过这个完全相同的问题。你可以做什么来防止这种情况的发生是为了确保在加载新的Bitmap之前回收以前的Bitmap。调用Bitmap.recycle()来执行此操作。 http://developer.android.com/reference/android/graphics/Bitmap.html#recycle()

我没有看到你在哪里处理你的代码中的位图,但你明白了吗?

当处理位图的是保持在明,他们实际上是在读有多大入内存,你真的需要为你的用例,大图像的另一件事。如果您不需要全部图像,则可以以较低的采样率将位图读取到应用程序。这节省了大量的内存。

1

这是很常见的prob.it是bcoz u的也许有许多images.and Android模拟器堆大小small.so你具有u使用后,每次回收乌尔imagebitmap ..


这将帮助你:[


link text

] 1

+0

实际上错误也在实际设备中出现! – 2011-01-13 13:03:16