Cómo evitar el puntero nulo en View.getDrawingCache ()?

Mi aplicación tiene este fragmento de código

mView.setDrawingCacheEnabled(true); mBitmap = Bitmap.createBitmap(mView.getDrawingCache()); 

Donde mView es una instancia de una subclase personalizada de FrameLayout. La aplicación ha funcionado bien durante 6 meses con miles de usuarios. Recientemente recibí pocos informes (posiblemente del mismo usuario pero no puedo confirmar) sobre un puntero nulo pasado a createBitmap (). No sé qué hardware o versión de Android que el usuario utiliza.

¿Qué puede causar getDrawingCache () para devolver null aunque he habilitado la caché justo antes de ella? ¿Está relacionado con la aceleración de hardware en los nuevos teléfonos? ¿Es debido a la RAM insuficiente para el mapa de bits? ¿Algo más? ¿Se puede prevenir?

Editar: He encontrado esta solución aquí http://tinyurl.com/7yranvj . ¿Es una solución razonable?

 mBitmap = Bitmap.createBitmap(mView.getWidth(), mView.getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(mBitMap); mView.draw(canvas); 

En realidad su suposición era correcta. Si está utilizando la capa acelerada de hardware, no puede utilizar la caché de dibujo. Los nuevos dispositivos tienen aceleración de hardware activada de forma predeterminada, por lo que podría ser su problema. Puede desactivar la aceleración de hardware para una vista única como esta.

 if(android.os.Build.VERSION.SDK_INT >= 11) frame.setLayerType(LAYER_TYPE_SOFTWARE, null); frame.setDrawingCacheEnabled(true); 
  • Android Ver setPadding () vs setPaddingRelative ()
  • Diferencia entre hardware y software en Android
  • Obtener el nombre de la vista de forma programática en Android
  • Diferencia real entre TextView y Button
  • ¿Por qué no hay un método getContentView () para la actividad?
  • Androide enfrente de bringChildToFront
  • Diferencia entre SurfaceView y ImageView
  • ¿Cómo cambiar el color de la lista de "final de desplazamiento" drag color?
  • ANR en el método SurfaceView "onTouchEvent (...)" en Android
  • "ResultIndex es -1, el polígono debe ser inválido!" Adter addView ()
  • ¿Por qué no se ve el color de fondo de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.