我的问题:

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线程上而不是背景线上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top