en primer lugar, w ithout su solución, comprobar su salida Logcat para:
ERROR/JavaBinder(20204): !!! FAILED BINDER TRANSACTION !!!
Probablemente usted está golpeando el límite de tamaño de archivo para la transacción IPC que contiene los cambios en la jerarquía RemoteViews
.
Cuando se copia el mapa de bits con el Bitmap.Config.ARGB_4444
configuración, cada píxel se representarán con 2 bytes, mientras que Bitmap.Config.ARGB_8888
(la configuración por defecto de 2.3 en adelante) cada píxel es de 4 bytes [Source].
Al usar su solución, está transmitiendo la mitad de datos y, por lo tanto, rechinando según el límite de tamaño. This post sugiere que el límite de tamaño es de 1 MB, pero no estoy seguro de si eso varía según la versión del sistema operativo o el fabricante.
Actualización: Un enfoque diferente para pasar una imagen sería no enviar el mapa de bits en sí, sino pasar un URI al archivo en el disco. Luego, debe asegurarse de que otros procesos tengan acceso de lectura a su archivo (el iniciador se ejecutará en un proceso diferente, por ejemplo). Si está escribiendo archivos en su directorio /data/data/my.package.name/
, puede hacerlo especificando MODE_WORLD_READABLE en Context.openFileOutput(). Por ejemplo:
remoteViews.setUri(R.id.time, "setImageURI", Uri.fromFile(file));
¿Podría ser lo mismo que: http://code.google.com/p/android/issues/detail?id=8489? – Heinrisch
sí, ya vi esto antes, pero necesito ARGB_8888 por su calidad y transparencia. – AVEbrahimi
Es probable que necesite enviar menos datos, lo que significa una imagen más pequeña o muestreada, o pasar el URI a la imagen. – wsanville