Question

Ma question:

  

12-18 17: 05: 03,336: DEBUG / StrictMode (2112): StrictMode violation de la politique; ~ Durée = 2073 ms: android.os.StrictMode $ StrictModeDiskReadViolation: politique = 23 violation = 2

A partir de la méthode de l'usine

  

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

Alors dans mon code

  

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

     

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

snip-son importante

  

étend la classe LoaderThread HandlerThread {

     

publique Handler mHandler;

     

LoaderThread publique (String name) {     super (nom);    }

     

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

La méthode getFromCache dans les appels de classe ImageCache

bitmap = BitmapFactory.decodeFile(fLoc);

Ce qui semble être en cours d'exécution sur le thread d'interface utilisateur, mais il fait aucun sens pour moi. Devrait pas être se fait appel à un fil de fond? Tel était le but d'utiliser HandlerThread après tout ...

La classe LoadThread est créé dans mon onCreate (bundle) comme celui-ci

  

LoaderThread loader = new LoaderThread ( "imgLoader")

     loader.start ()

et les messages sont transmis à partir du fil de l'interface utilisateur par l'intermédiaire du gestionnaire

  

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

Je me demande si cela a à voir avec la méthode getInstance qui est statique

  

static synchronisée ImageCache getInstance () {

     

if (_instance == NULL) {     _instance = new ImageCache ();    }    retourner _instance;   }

Était-ce utile?

La solution

Je me sens comme un âne maintenant, mais j'appelle la mauvaise méthode sur mon gestionnaire ...

dans le mauvais sens

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

le droit chemin

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

Alors en quelque sorte les messages étaient en cours d'exécution par le gestionnaire encore, juste sur le thread d'interface utilisateur au lieu de l'arrière-plan.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top