Strictmode混乱 - 这是错误的线程?
-
11-10-2019 - |
题
我的问题:
12-18 17:05:03.336:调试/strictmode(2112):违反严格策略; 〜持续时间= 2073 ms:android.os.strictmode $ strictmodiskreadviolation:策略= 23违规= 2
从工厂方法
12-18 17:05:03.336:调试/strictmode(2112):at android.graphics.bitmapfactory.decodefile(bitmapfactory.java:299)
然后在我的代码中
12-18 17:05:03.336:调试/strictmode(2112):在blah.imagecache.getfromcache(imagecache.java:248)
12-18 17:05:03.336:调试/strictmode(2112):
在blah2 $ loaderthread $ 1.handlemessage(blah.java:63)
重要的剪辑
class loaderThread扩展了HandlerThread {
公共处理者Mhandler;
public LoaderThread(字符串名称){super(name); }
@Override public void onlooperPrepared(){mhandler = new Handler(){public void handlemessage(message msg){bitmap bit = imagecache.getInstance()。getfromcache((string)msg.obj,imagecache.use_use_disk); }}; }}}
ImageCache类调用中的GetFromCache方法
bitmap = BitmapFactory.decodeFile(fLoc);
这似乎在UI线程上运行,但对我来说没有意义。这不应该在背景线程上被调用吗?这是使用的目标 处理 毕竟...
LoadThread类是在我的ongreate(捆绑)中创建的
loaderThread Loader = new LoaderThread(“ imgloader”)
loader.start();
和消息通过处理程序从UI线程传递
loader.mhandler.disPatchMessage(loader.mhandler.obtainmessage(args ..));
我想知道这是否与静态的getinstance方法有关
公共静态同步ImageCache getInstance(){
if(_instance == null){_instance = new ImageCache(); }返回_instance; }
解决方案
我现在感觉像个屁股,但是我在处理程序上打了错误的方法...
错误的方法
loader.mHandler.dispatchMessage(loader.mHandler.obtainMessage(args..));
正确的方式
loader.mHandler.sendMessage(loader.mHandler.obtainMessage(args..));
因此,某种程度上,这些消息仍在使用处理程序,只是在UI线程上而不是背景线上。