Pregunta

Mi problema:

12-18 17: 05: 03,336: DEBUG / StrictMode (2112): StrictMode violación de la política; ~ = 2073 ms de duración: android.os.StrictMode $ StrictModeDiskReadViolation: política de violación = 23 = 2

A partir del método de fábrica

12-18 17: 05: 03,336: DEBUG / StrictMode (2112): en android.graphics.BitmapFactory.decodeFile (BitmapFactory.java:299)

A continuación, en mi código

12-18 17: 05: 03,336: DEBUG / StrictMode (2112): en blah.ImageCache.getFromCache (ImageCache.java:248)

12-18 17: 05: 03,336: Debug / StrictMode (2112):
a blah2 $ LoaderThread $ 1.handleMessage (blah.java:63)

SNIP-Su importante

LoaderThread clase extiende HandlerThread {

pública Handler mHandler;

LoaderThread pública (String nombre) { super (nombre); }

@ Override onLooperPrepared public void () { mHandler = new Handler () { handleMessage pública vacío (msg Mensaje) { bit Bitmap = ImageCache.getInstance () getFromCache ((String) msg.obj, ImageCache.USE_DISK).; } }; } }

El método getFromCache en las llamadas clases ImageCache

bitmap = BitmapFactory.decodeFile(fLoc);

Lo que parece estar corriendo en el subproceso de interfaz de usuario, pero no tiene ningún sentido para mí. ¿No debería ser esta recibiendo llamadas en un subproceso en segundo plano? Este fue el objetivo de utilizar HandlerThread después de todo ...

La clase LoadThread se crea en mi onCreate (bundle) como esto

LoaderThread loader = new LoaderThread ( "imgLoader")

loader.start ();

y los mensajes se pasan desde el hilo de interfaz de usuario a través del controlador

loader.mHandler.dispatchMessage (loader.mHandler.obtainMessage (args ..));

Me pregunto si esto tiene que ver con el método getInstance que es estática

public static sincronizada ImageCache getInstance () {

si (_instance == null) { _instance = nuevo ImageCache (); } _instance regresar; }

¿Fue útil?

Solución

Me siento como un culo, pero me estaba llamando el método equivocado en mi manejador ...

el camino equivocado

loader.mHandler.dispatchMessage(loader.mHandler.obtainMessage(args..));

de la manera correcta

loader.mHandler.sendMessage(loader.mHandler.obtainMessage(args..));

Así que de alguna manera los mensajes se están ejecutando a través del manejador aún, sólo en el hilo de interfaz de usuario en lugar del fondo uno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top