Tengo una aplicación publicada que se bloquea al inicio en Android N cuando la Display size
configuración del sistema operativo recién introducida está configurada en un valor demasiado grande.
Cuando miro en logcat, veo el siguiente mensaje:
java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.
He rastreado el problema hasta un ImageView en mi primera actividad que muestra una imagen de fondo grande y agradable. La imagen en cuestión es 2048x1066 y está en mi drawables
directorio genérico , por lo que no importa la densidad, se utilizará esta imagen.
Todo funciona bien cuando el Display size
entorno es Small
. Pero cuando subo Default
, deja de funcionar. Si luego cambio la imagen por una más pequeña, funciona Default
, pero si subo Large
, deja de funcionar nuevamente.
Supongo que el ajuste Display size
hace que su dispositivo se comporte como un dispositivo físicamente más pequeño con una mayor densidad de píxeles. Pero no entiendo qué se supone que debo hacer aquí. Si coloco imágenes cada vez más pequeñas para resoluciones progresivamente más altas, no se verá bien en pantallas realmente grandes. ¿O no estoy entendiendo algo?
Cualquier sugerencia será muy apreciada.
fuente
res/drawable/
es un sinónimo deres/drawable-mdpi/
. Si desea que la imagen no se escale según la densidad, useres/drawable-nodpi/
ores/drawable-anydpi/
.res/drawable/foo.png
(también conocido como,res/drawable-mdpi/foo.png
), y su dispositivo lo tienexhdpi
, la imagen se duplicará a lo largo de ambos ejes, ocupando 4 veces la memoria.Respuestas:
Yo mi caso, moviendo la (alta resolución) de mapa de bits salpicaduras de dibujable a dibujable-xxhdpi era la solución.
Yo tuve el mismo problema. No sospeché que mi pantalla de bienvenida fuera el problema, ya que se muestra cuando se inicia la aplicación, pero resultó que la pantalla de bienvenida es el problema.
La pantalla de bienvenida en mi caso tiene una resolución xxhdpi, y se colocó por error en el dibujable carpeta, en lugar de dibujable-xxhdpi . Esto hizo que Android asumiera que la pantalla de presentación tenía una resolución de mdpi y escalar la imagen a 3 * 3 veces su tamaño requerido y tratar de crear un mapa de bits.
fuente
Resolví el problema después de agregar el siguiente código en la etiqueta de aplicación del archivo Manifest entre android: líneas.
android:hardwareAccelerated="false"
fuente
android:hardwareAccelerated="false"
. mostrando una vista extraña en algún dispositivo que tiene un nivel de API por debajo de 22.No sé si ayudaría a alguien, pero lo dejaré aquí. En mi caso, el problema estaba solo en los dispositivos Sumsung con Android 7 y el problema estaba en las proporciones de la pantalla de inicio. después de cambiar la altura a 1024 px, todo funciona bien
fuente
Mueva su imagen en el dibujable a mipmap-xxhdpi. Su imagen está en formato de mapa de bits, por lo que debe poner su imagen en la carpeta mipmap, luego funcionará
fuente
Intente utilizar la clase Bitmap.Factory, este enlace lo ayudará a cargar mapas de bits grandes de manera eficiente
fuente
si usa Picasso, cambie a Glide así.
Quitar picasso
Picasso.get().load(Uri.parse("url")).into(imageView)
Cambiar planeo
Glide.with(context).load("url").into(imageView)
Más eficiente
fuente
Hay algunos escenarios en los que el mapa de bits original debe dibujarse en ImageViews, aplicaciones de edición de fotos, etc.
como la bahía mencionada anteriormente
android:hardwareAccelerated="false"
Causará una mala experiencia en la interfaz de usuario, puede configurar acelerado por hardware Solo una actividad seleccionada donde se dibujará una imagen de alta resolución
<application android:hardwareAccelerated="true"> <activity ... /> <activity android:hardwareAccelerated="false" /> </application>
fuente
Revisé el Logcat
Proceso: co.coolresume, PID: 11145 java.lang.RuntimeException: Canvas: tratando de dibujar un mapa de bits demasiado grande (572166144bytes). en android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.java:229) en android.view.RecordingCanvas.drawBitmap (RecordingCanvas.java:97) en android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.java .529) widget.ImageView.onDraw (ImageView.java:1367) en android.view.View.draw (View.java:19380)
Resolví el error usando el siguiente manifiesto.
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" android:hardwareAccelerated="false"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
fuente
Los archivos de iconos son demasiado grandes para que Android los cargue de manera eficiente y sin problemas. Android reconoce esto con sus algoritmos inteligentes.
Puede cambiar el tamaño de los archivos de iconos usando Final Android Resizer por asystat. Cambie su tamaño a "xhdpi" o menor.
Coloque las fotos redimensionadas en dibujables o sobrescríbalas sobre los archivos de iconos grandes existentes.
Entonces, ya está.
fuente
Si está usando deslizamiento y está cargando 1k de imágenes a la vez o algunas imágenes, entonces es cuestión de deslizamiento o lo que sea que esté haciendo para configurar la vista de imagen. puede resolverlo simplemente aplicando el tipo de escala en deslizamiento.
fuente
En mi caso, acabo de cambiar el lienzo de la imagen que se usa en segundo plano usando Paint3d (o puedes usar cualquier otro). Aquí estoy compartiendo una captura de pantalla, solo revísala.
fuente
se resuelve cambiando el tamaño de las imágenes a un tamaño menor.
fuente