StrictMode путаница - как это не та тема? - PullRequest
3 голосов
/ 19 декабря 2010

Моя проблема:

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; }

1 Ответ

3 голосов
/ 19 декабря 2010

Теперь я чувствую себя задницей, но я вызываю неправильный метод в моем обработчике ...

неправильный путь

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

правильный путь

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

Так что сообщения каким-то образом проходили через обработчик, просто в потоке пользовательского интерфейса вместо фонового.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...