Моя проблема:
12-18 17: 05: 03.336: DEBUG / StrictMode (2112): нарушение политики StrictMode; ~ длительность = 2073 мс: android.os.StrictMode $ StrictModeDiskReadViolation: нарушение политики = 23 = 2
От фабричного метода
12-18 17: 05: 03.336: DEBUG / StrictMode (2112): atroid.graphics.BitmapFactory.decodeFile (BitmapFactory.java:299)
Тогда в моем коде
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)
Важный снайпер-свой
класс LoaderThread расширяет HandlerThread {
public Handler mHandler;
public LoaderThread (имя строки) {
супер (имя);
}
@ Override
public void onLooperPrepared () {
mHandler = новый обработчик () {
public void handleMessage (Сообщение msg) {
Bitmap bit = ImageCache.getInstance (). GetFromCache ((String) msg.obj, ImageCache.USE_DISK);
}
};
}
}
Метод getFromCache в классе ImageCache вызывает
bitmap = BitmapFactory.decodeFile(fLoc);
Который, кажется, работает в потоке пользовательского интерфейса, но для меня это не имеет смысла. Разве это не должно вызываться в фоновом потоке? Это было целью использования HandlerThread в конце концов ...
Класс LoadThread создается в моем onCreate (связке) следующим образом
LoaderThread loader = новый LoaderThread ("imgLoader")
loader.start ();
и сообщения передаются из потока пользовательского интерфейса через обработчик
loader.mHandler.dispatchMessage (loader.mHandler.obtainMessage (арг ..));
Мне интересно, связано ли это с методом getInstance, который является статическим
публичная статическая синхронизация ImageCache getInstance () {
if (_instance == null) {
_instance = new ImageCache ();
}
вернуть _instance;
}