私の問題:
12-18 17:05:03.336:DEBUG / StrictMode(2112):StrictModeポリシー違反。〜duration = 2073 ms:android.os.StrictMode $ StrictModeDiskReadViolation:policy=23違反=2
ファクトリメソッドから
12-18 17:05:03.336:DEBUG / StrictMode(2112):android.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を拡張します{
パブリックハンドラーmHandler;
public LoaderThread(String name){super(name); }
@Override public void onLooperPrepared(){mHandler = new Handler(){public void handleMessage(Message msg){Bitmap bit = ImageCache.getInstance()。getFromCache((String)msg.obj、ImageCache.USE_DISK); }}; }}
ImageCacheクラスのgetFromCacheメソッドは
bitmap = BitmapFactory.decodeFile(fLoc);
これはUIスレッドで実行されているようですが、私には意味がありません。これはバックグラウンドスレッドで呼び出されるべきではありませんか?結局、これがHandlerThreadを使用する目的でした...
LoadThreadクラスはこのように私のonCreate(bundle)で作成されます
LoaderThread loader = new LoaderThread( "imgLoader")
loader.start();
メッセージはUIスレッドからハンドラーを介して渡されます
loader.mHandler.dispatchMessage(loader.mHandler.obtainMessage(args ..));
これは静的なgetInstanceメソッドと関係があるのだろうかと思います
パブリック静的同期ImageCachegetInstance(){
if(_instance == null){_instance = new ImageCache(); } return _instance; }