OutOfMemoryError: Usando una imagen que es 1080 * 1920 haga la página de bienvenida

Quiero implementar una página de bienvenida en mi aplicación para Android. Así que en el xml de diseño, hay un imageView y el archivo de imagen es un archivo png que es 1080*1920 , cuando se ejecuta la aplicación, se produce un error OutOfMemoryError , ¿cómo puedo solucionar eso?

El archivo XML:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/welcome1"/> </LinearLayout> 

La información de error:

 04-17 18:40:16.038 29793-29793/cn.test.android E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: cn.test.android, PID: 29793 java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:597) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:432) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) at android.content.res.Resources.createFromResourceStream(Resources.java:2477) at android.content.res.Resources.loadDrawable(Resources.java:2136) at android.content.res.MiuiResources.loadDrawable(MiuiResources.java:320) at android.content.res.Resources.getDrawable(Resources.java:710) at android.widget.ImageView.resolveUri(ImageView.java:638) at android.widget.ImageView.setImageResource(ImageView.java:367) at cn.test.android.LandingPageActivity$1.instantiateItem(LandingPageActivity.java:40) at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:837) at android.support.v4.view.ViewPager.populate(ViewPager.java:987) at android.support.v4.view.ViewPager.populate(ViewPager.java:919) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) at android.view.View.measure(View.java:16508) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) at android.view.View.measure(View.java:16508) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1946) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1143) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1325) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1030) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5639) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5047) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622) at dalvik.system.NativeStart.main(Native Method) 

4 Solutions collect form web for “OutOfMemoryError: Usando una imagen que es 1080 * 1920 haga la página de bienvenida”

Si tiene welcome1.png en la carpeta welcome1.png , póngalo en el drawable-nodpi .

Esto se debe a que drawable se interpreta como drawable-mdpi , por lo que al cargarlo en un teléfono de mayor densidad, se ampliará (convirtiéndose en un mapa de bits gigantesco).

la memoria asignada a por aplicación es escasa en android no deberías estar dándolo a imágenes como eso.

su aplicación se está agotando la memoria debido a que está recibiendo este error.

 what you can do is increase cahce memory of emulator to support your memory usage. 

así que no es la solución exacta, trate de minimizar la resolución de la imagen y usted puede deshacerse de este error,

Android en general tiene problemas con las imágenes, especialmente las grandes. Esto se debe a la cantidad máxima que una aplicación tiene permitido asignar. Puede volver a muestrear mapas de bits a medida que los carga.

Como un breve ejemplo, esto reducirá a la mitad el tamaño de la imagen:

 final BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 2; Bitmap bm = BitmapFactory.decodeStream(is, null, opts); 

Trate de reducir su imagen original (manteniendo la relación de aspecto) y que establezca el scaleType en su ImageView ro fitCenter o centerCrop :

 <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitCenter" android:background="@drawable/welcome1"/> 
  • Ruta para getResourceAsStream en el proyecto de Android
  • Obtener la posición de imageview en el diseño android
  • Cambiar el tamaño de ImageView en tiempo de ejecución mediante un botón - Android
  • ¿Cómo abrir una URL cuando haga clic en ImageView en Android?
  • cómo enviar la imagen de una actividad a otra?
  • Android ImageView setImageResource en el código
  • Android: ¿Cómo puedo detener una animación infinita aplicada en un ImageView?
  • Android: ImageView getID (); Devolver entero
  • Android cómo escribir clic evento de un ImageView
  • ¿Cómo obtengo diferentes posiciones de clic en un solo ImageView
  • Cómo leer bits extraíbles como InputStream
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.