Frage

Meine Frage:

12-18 17: 05: 03,336: DEBUG / StrictMode (2112): StrictMode Richtlinienverletzung; ~ Dauer = 2.073 ms: android.os.StrictMode $ StrictModeDiskReadViolation: Politik = 23 Verletzung = 2

Von der Factory-Methode

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

Dann in meinem Code

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

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

Wichtige Snip-its

Klasse LoaderThread erweitert HandlerThread {

Öffentliche Handler mhandler;

public LoaderThread (String name) { Super (name); }

@Override public void onLooperPrepared () { mhandler = new Handler () { public void handle (Message msg) { Bitmap-Bit = ImageCache.getInstance () getFromCache ((String) msg.obj, ImageCache.USE_DISK.); } }; } }

Die getFromCache Methode in der Klasse Imagecache Anrufen

bitmap = BitmapFactory.decodeFile(fLoc);

Welche scheint auf dem UI-Thread ausgeführt werden, aber es macht keinen Sinn für mich. Sollte dies nicht auf einem Hintergrund-Thread aufgerufen werden, zu werden? Das war das Ziel der Verwendung von HandlerThread nachdem alle ...

Die LoadThread Klasse wird in meinem onCreate (Bündel) erstellt wie diese

LoaderThread loader = new LoaderThread ( "imgLoader")

loader.start ();

und Nachrichten aus dem UI-Thread über die Handler übergeben werden

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

Ich frage mich, ob dies mit der getInstance Methode zu tun, die statisch ist

public static synchronisiert Imagecache getInstance () {

if (_instance == null) { _instance = new Imagecache (); } Rückkehr _instance; }

War es hilfreich?

Lösung

ich wie ein Esel fühle mich jetzt, aber ich rufe die falsche Methode auf meinem Handler ...

die falsche Art und Weise

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

der richtige Weg,

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

Also irgendwie die Nachrichten über den Handler noch laufen wurden, nur auf dem UI-Thread anstelle des Hintergrund ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top