Domanda

Il mio problema:

12-18 17: 05: 03,336: DEBUG / StrictMode (2112): violazione delle norme StrictMode; ~ Durata = 2073 ms: android.os.StrictMode $ StrictModeDiskReadViolation: politica = 23 violazione = 2

Dal metodo factory

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

Poi, nel mio codice

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

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

snip-it Importante

class LoaderThread estende HandlerThread {

pubblica Handler mHandler;

LoaderThread pubblico (String name) { super (nome); }

@Override public void onLooperPrepared () { mHandler = new Handler () { handleMessage public void (msg Message) { bit bitmap = ImageCache.getInstance () getFromCache ((String) msg.obj, ImageCache.USE_DISK).; } }; } }

Il metodo getFromCache negli inviti di classe imagecache

bitmap = BitmapFactory.decodeFile(fLoc);

Il che sembra essere in esecuzione sul thread dell'interfaccia utente, ma non ha senso per me. Non dovrebbe questo essere sempre chiamato in un thread in background? Questo è stato l'obiettivo di utilizzare HandlerThread dopo tutto ...

La classe LoadThread viene creato in mia onCreate (bundle) come questo

LoaderThread loader = new LoaderThread ( "imgLoader")

loader.start ();

ed i messaggi sono passati dal thread dell'interfaccia utente tramite il gestore

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

Mi chiedo se questo ha a che fare con il metodo getInstance che è statico

public static sincronizzato imagecache getInstance () {

if (_instance == null) { _instance = nuovo imagecache (); } tornare _instance; }

È stato utile?

Soluzione

mi sento come un asino ora, ma mi stava chiamando il metodo sbagliato sul mio gestore ...

nel modo sbagliato

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

la strada giusta

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

Così in qualche modo i messaggi sono stati in esecuzione attraverso il gestore ancora, proprio sul thread UI al posto dello sfondo uno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top