Строгая путаница - как это неправильный поток?
-
11-10-2019 - |
Вопрос
Моя проблема:
12-18 17: 05: 03.336: Debug/StrictMode (2112): нарушение политики строгого кодея; ~ Продолжительность = 2073 мс: Android.os.StrictMode $ strictmodediskReadViolation: политика = 23 нарушение = 2
Из фабричного метода
12-18 17: 05: 03.336: Debug/StrictMode (2112): at android.graphics.bitmapfactory.decodefile (bitmapfactory.java:299)
Тогда в моем коде
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):
в Blah2 $ LoaderThread $ 1HandleMessage (Blah.java:63)
Важный SNIP-IT
Class LoaderThread Extends HandlerThread {
общественный обработчик Мандлер;
public LoaderThread (String name) {super (name); }
@Override public void onlooperPrepareD () {mhandler = new Handler () {public void handlemessage (сообщение msg) {bitmap bit = imageecache.getinstance (). GetFromCache ((String) msg.obj, imageCache.USE_DISK); }}; }}
Метод GetFromCache в вызовах класса ImageCache
bitmap = BitmapFactory.decodeFile(fLoc);
Который, кажется, работает в потоке пользовательского интерфейса, но это не имеет смысла для меня. Разве это не должно быть вызвано в фоновую ветку? Это была цель использования HasterlerThread после всего...
Класс LoadThread создается в моем Oncreate (пакет), как это
LoaderThread Loader = new LoaderThread ("ImgLoader")
Loader.Start ();
и сообщения передаются из потока пользовательского интерфейса через обработчик
Loader.mhandler.dispatchMessage (Loader.mhandler.obtainmessage (args ..));
Мне интересно, связано ли это с методом GetInstance, который статичен
Публичный статический синхронизированный ImageCache GetInstance () {
if (_instance == null) {_instance = new ImageCache (); } return _instance; }
Решение
Теперь я чувствую себя задницей, но я называл не тот метод на своем обработчике ...
неправильный путь
loader.mHandler.dispatchMessage(loader.mHandler.obtainMessage(args..));
правильный путь
loader.mHandler.sendMessage(loader.mHandler.obtainMessage(args..));
Так что каким -то образом сообщения до сих пор проходили через обработчик, только на потоке пользовательского интерфейса вместо фонового.