Отображение изображений с SD-карты в gridview android

Im Отображение изображений из определенной папки на SD-карте в GridView до тех пор, пока все работы не будут прекращены, все изображения будут отображаться в gridview, но когда я изменю ориентацию экрана, он сработает. Ниже мой код и журнал сбоев:

import java.io.File; import android.content.Context; import android.net.Uri; import android.os.Environment; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class ImageAdapter extends BaseAdapter { private Context mContext; File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MYPICS" + File.separator); private File[] fileName = root.listFiles(); int count=fileName.length; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return fileName.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } // create a new ImageView for each item referenced by the Adapter public View getView(int position, View convertView, ViewGroup parent) { Uri uri = Uri.fromFile(fileName[position]); ImageView imageView; if (convertView == null) { // if it's not recycled, initialize some attributes imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageURI(uri); return imageView; } } 

Я получаю сообщение об ошибке памяти, ниже мой Logcat:

  05-16 16:18:31.218: E/AndroidRuntime(26907): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:573) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:657) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.ImageView.resolveUri(ImageView.java:521) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.ImageView.setImageURI(ImageView.java:305) 05-16 16:18:31.218: E/AndroidRuntime(26907): at com.sachin.imagegrideview.ImageAdapter.getView(ImageAdapter.java:53) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.AbsListView.obtainView(AbsListView.java:1464) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.GridView.onMeasure(GridView.java:935) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.View.measure(View.java:8313) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewRoot.performTraversals(ViewRoot.java:845) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.os.Handler.dispatchMessage(Handler.java:99) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.os.Looper.loop(Looper.java:130) 05-16 16:18:31.218: E/AndroidRuntime(26907): at android.app.ActivityThread.main(ActivityThread.java:3687) 05-16 16:18:31.218: E/AndroidRuntime(26907): at java.lang.reflect.Method.invokeNative(Native Method) 05-16 16:18:31.218: E/AndroidRuntime(26907): at java.lang.reflect.Method.invoke(Method.java:507) 05-16 16:18:31.218: E/AndroidRuntime(26907): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 05-16 16:18:31.218: E/AndroidRuntime(26907): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 05-16 16:18:31.218: E/AndroidRuntime(26907): at dalvik.system.NativeStart.main(Native Method) 

Добавьте это в свой манифест для активности списка

 android:configChanges="orientation|keyboardHidden" 

Если это не помогает, то добавьте этот фрагмент кода для вашего файла изображения, чтобы пробовать битмап

 private Bitmap decodeFile(File f){ FileOutputStream os = null; try { //Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; FileInputStream fis = new FileInputStream(f); BitmapFactory.decodeStream(fis, null, o); fis.close(); int scale = 1; if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) { scale = (int)Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5))); } //Decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; fis = new FileInputStream(f); try { b = BitmapFactory.decodeStream(fis, null, o2); } catch (OutOfMemoryError e) { Log.d("hai","filename"+f); System.gc(); } fis.close(); } catch (IOException e) { } return b; } 

Загрузите много изображений, из-за чего приложение выйдет из памяти и закроется. Я думаю, что это то, что происходит с вашим приложением. Проблема с памятью является сложной проблемой android при разработке приложения. Это можно решить, вручную очистив неиспользуемые растровые изображения и Используя сборщик мусора.

Попробуйте использовать System.gc ();

Попробуйте утилизировать растровое изображение, используя

Bitmap.recycle ();

Сделайте все неиспользованное битовое значение null.

Отмените все неиспользованную память.

Это все поможет вам много, а также перейдите по этой ссылке. Используйте анализатор памяти, это поможет вам определить выделенную память> попробуйте эту ссылку

<activity android:configChanges="keyboardHidden|orientation"></activity>

В вашем manifest.xml отредактируйте свой тег активности и попробуйте