Visualización de imágenes de la tarjeta sd en gridview android

Im Mostrar imágenes de una carpeta específica en la tarjeta sd en GridView hasta saber que todo funciona bien todas las imágenes se muestran en la vista de cuadrícula, pero cuando cambio la orientación de la pantalla se bloquea. A continuación está mi código y Crash Log:

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

Estoy recibiendo la memoria de error, Abajo está mi 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) 

Agregue esto a su manifiesto para la actividad listview

 android:configChanges="orientation|keyboardHidden" 

Si esto no ayuda a continuación, agregar este pedazo de código para su archivo de imagen para muestrear el mapa de bits

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

Cargar muchas imágenes hace que la aplicación se quede sin memoria y la fuerza se cierra. Creo que esto es lo que sucede a su problema de memoria application.the es un problema complejo de Android mientras se desarrolla un application.this se puede resolver mediante la limpieza manual de los mapas de bits no utilizados y Utilizando el recolector de basura.

Intente usar System.gc ();

Intente reciclar el mapa de bits utilizando

Bitmap.recycle ();

Hacer todo el mapa de bits sin usar nulo.

Desasignar toda la memoria no utilizada.

Todo esto te ayudará mucho y también pasará por este enlace. Utiliza un analizador de memoria que te ayudará a detectar la memoria Desactivada> prueba este enlace

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

En su manifest.xml edite su etiqueta de actividad y pruebe

  • Cómo cargar el archivo xml diferente en el cambio de orientación en android
  • Cambiar la orientación, perder todos los elementos de la lista
  • Mono para Android - Todas las actividades en orientación vertical
  • Las imágenes tomadas con ACTION_IMAGE_CAPTURE siempre devuelven 1 para ExifInterface.TAG_ORIENTATION en algunos dispositivos más nuevos
  • Orientación del diseño en código
  • Comportamiento extraño de las medidas del campo magnético mientras gira el dispositivo
  • Android: diseño alternativo xml para el modo horizontal
  • La dirección de la brújula es diferente dependiendo de la orientación del teléfono
  • Cómo bloquear la orientación durante el tiempo de ejecución
  • Verificar orientación en el teléfono Android
  • Cuando cambio la orientación de retrato a paisaje mi resultado calculado está desapareciendo. Cómo resolverlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.