Android: la notificación deja de actualizarse una vez que se ha actualizado durante un determinado número de veces en Kit-Kat

Así que tengo una notificación en mi aplicación. La notificación tiene texto y una imagen que obtengo de un LruCache que relleno al principio. El problema es que en los dispositivos de Kit-Kat (Moto E, XIomi) en mi caso, la notificación deja de actualizarse si ya ha actualizado un número fijo de veces, digamos n (este n suele ser fijo para cada dispositivo y es < 10). Este es mi código para actualizar

String title = CommonUtils.getTitleFromID(id, context); Bitmap bitmap = DataProvider.getInstance(context).diskLruImageCache.getBitmap(id + ""); if (playbackPaused) { bigView.setImageViewResource(R.id.pause, R.drawable.pause_noti); smallView.setImageViewResource(R.id.pause1, R.drawable.pause_noti); remoteViews.setImageViewResource(R.id.pause2, R.drawable.pause_noti); playbackPaused = false; Log.d(TAG, "noti-false"); } bigView.setTextViewText(R.id.title, title + ""); bigView.setImageViewBitmap(R.id.img, bitmap); smallView.setTextViewText(R.id.title1, title); smallView.setImageViewBitmap(R.id.img1, bitmap); mNotificationManager.notify(NOTIFY_ID, notification); 

He intentado con un poco de depuración y todo y he encontrado que si no se establece el mapa de bits, (y sólo hacer
bitmap = null ) entonces todo funciona bien.

No entiendo por qué esto está sucediendo. Este problema es Android versión específica ya que ya probado en Nexus 5 (Lollipop) y otros teléfonos Android 5, pero allí no sucede. ¿Alguien tiene alguna idea de cuál puede ser la razón detrás de esto?

No estoy esperando una situación exacta. Incluso algunas ideas en la dirección correcta serán muy útiles. Gracias !!

También estoy agregando el código para mi DiskLruCache en caso de que podría ser necesario,

 public class DiskLruImageCache { private DiskLruCache mDiskCache; private Bitmap.CompressFormat mCompressFormat = Bitmap.CompressFormat.JPEG; private int mCompressQuality = 70; private static final int APP_VERSION = 1; private static final int VALUE_COUNT = 1; private static final String TAG = "DiskLruImageCache"; public DiskLruImageCache( Context context,String uniqueName, int diskCacheSize, Bitmap.CompressFormat compressFormat, int quality ) { try { final File diskCacheDir = getDiskCacheDir(context, uniqueName ); mDiskCache = DiskLruCache.open( diskCacheDir, APP_VERSION, VALUE_COUNT, diskCacheSize ); mCompressFormat = compressFormat; mCompressQuality = quality; } catch (IOException e) { e.printStackTrace(); } } private boolean writeBitmapToFile( Bitmap bitmap, DiskLruCache.Editor editor ) throws IOException { OutputStream out = null; try { out = new BufferedOutputStream( editor.newOutputStream( 0 ), Utils.IO_BUFFER_SIZE ); return bitmap.compress( mCompressFormat, mCompressQuality, out ); } finally { if ( out != null ) { out.close(); } } } private boolean writeUriToFile( Uri bitmap, DiskLruCache.Editor editor ) throws IOException, FileNotFoundException { OutputStream out = null; try { out = new BufferedOutputStream( editor.newOutputStream( 0 ), Utils.IO_BUFFER_SIZE ); return true; } finally { if ( out != null ) { out.close(); } } } private File getDiskCacheDir(Context context, String uniqueName) { // Check if media is mounted or storage is built-in, if so, try and use external cache dir // otherwise use internal cache dir final String cachePath = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Utils.isExternalStorageRemovable() ? Utils.getExternalCacheDir(context).getPath() : context.getCacheDir().getPath(); return new File(cachePath + File.separator + uniqueName); } public void put( String key, Bitmap data ) { DiskLruCache.Editor editor = null; try { editor = mDiskCache.edit( key ); if ( editor == null ) { return; } if( writeBitmapToFile( data, editor ) ) { mDiskCache.flush(); editor.commit(); if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "image put on disk cache " + key ); } } else { editor.abort(); if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); } } } catch (IOException e) { if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); } try { if ( editor != null ) { editor.abort(); } } catch (IOException ignored) { } } } public void put( String key, Uri data ) { DiskLruCache.Editor editor = null; try { editor = mDiskCache.edit( key ); if ( editor == null ) { return; } if( writeUriToFile( data, editor ) ) { mDiskCache.flush(); editor.commit(); if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "image put on disk cache " + key ); } } else { editor.abort(); if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); } } } catch (IOException e) { if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", "ERROR on: image put on disk cache " + key ); } try { if ( editor != null ) { editor.abort(); } } catch (IOException ignored) { } } } public synchronized Bitmap getBitmap( String key ) { Bitmap bitmap = null; DiskLruCache.Snapshot snapshot = null; try { snapshot = mDiskCache.get( key ); if ( snapshot == null ) { return null; } final InputStream in = snapshot.getInputStream( 0 ); if ( in != null ) { final BufferedInputStream buffIn = new BufferedInputStream( in, Utils.IO_BUFFER_SIZE ); bitmap = BitmapFactory.decodeStream(buffIn); } } catch ( IOException e ) { e.printStackTrace(); } finally { if ( snapshot != null ) { snapshot.close(); } } if ( BuildConfig.DEBUG ) { Log.d( "cache_test_DISK_", bitmap == null ? "" : "image read from disk " + key); } return bitmap; } public boolean containsKey( String key ) { boolean contained = false; DiskLruCache.Snapshot snapshot = null; try { snapshot = mDiskCache.get( key ); contained = snapshot != null; } catch (IOException e) { e.printStackTrace(); } finally { if ( snapshot != null ) { snapshot.close(); } } return contained; } public boolean removeKey( String key ) { boolean removed=false; DiskLruCache.Snapshot snapshot = null; try { removed = mDiskCache.remove( key ); } catch (IOException e) { e.printStackTrace(); } finally { if ( snapshot != null ) { snapshot.close(); } } return removed; } public void clearCache() { if ( BuildConfig.DEBUG ) { Log.d("cache_test_DISK_", "disk cache CLEARED"); } try { mDiskCache.delete(); } catch ( IOException e ) { e.printStackTrace(); } } public File getCacheFolder() { return mDiskCache.getDirectory(); } } 

Poner si la condición para kitkat y versiones más bajas … después de la versión kitkat cambios en color en el sistema de notificación .. mi mipmap notificar img siz es 96 * 96

  NOTIFICATION_ID= Integer.parseInt(arr_msg[7].toString()); mBuilder.setSmallIcon(R.mipmap.alert_nodification_icon) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.alert_nodification_icon)) .setContentTitle(notification_vehicle_no) .setStyle(new NotificationCompat.BigTextStyle() .bigText(notification_msg)) .setContentText(notification_msg);} mBuilder.setContentIntent(contentIntent); Notification notification = mBuilder.build(); notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.defaults |= Notification.DEFAULT_SOUND; notification.defaults |= Notification.DEFAULT_VIBRATE; mNotificationManager.notify(NOTIFICATION_ID,notification); 
  • La notificación de Android no muestra su contenido cuando la aplicación no se está ejecutando
  • Cómo deshabilitar el botón Inicio sin utilizar TYPE_KEYGUARD?
  • Cómo poner un oyente onclick dentro de un servicio
  • ¿Cómo desactivar / reactivar la vibración que se produce al recibir la notificación?
  • Android Remoteviews para notificaciones ampliadas
  • Android: actualización de la barra de progreso de la notificación, correctamente
  • Imagen de fondo para la notificación de desgaste androide
  • Interacción con AsyncTask de la barra de notificación
  • Cómo cancelar un servicio de primer plano de usar la notificación (borrar descartar) o borrar todas las notificaciones?
  • Actualizar el texto de la notificación, no la notificación completa
  • INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.