質問

私の問題:

12-18 17:05:03.336:DEBUG/STRICTMODE(2112):StrictModeポリシー違反。 〜期間= 2073 ms: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):atblah.imagecache.getFromCache(ImageCache.java:248)

12-18 17:05:03.336:debug/strictmode(2112):
atblah2 $ loaderthread $ 1.handlemessage(blah.java:63)

重要なスニップイット

class loaderthreadはhandlerthreadを拡張します{

パブリックハンドラーMhandler;

public loaderthread(string name){super(name); }

@Override public void onlooperprepared(){mhandler = new handler(){public void handlemessage(message msg){bitmap bit = migmecache.getInstance()。 }}; }}

ImageCacheクラス呼び出しのGetFromCacheメソッド

bitmap = BitmapFactory.decodeFile(fLoc);

これはUIスレッドで実行されているようですが、それは私には意味がありません。これは背景スレッドで呼び出されるべきではありませんか?これが使用の目標でした handlerthread 結局...

LoadThreadクラスは、このように私のonCreate(バンドル)で作成されます

LoaderThread Loader = new LoaderThread( "imgloader")

loader.start();

メッセージはハンドラーを介してUIスレッドから渡されます

loader.mhandler.dispatchmessage(loader.mhandler.obtainmessage(args ..));

これが静的なGetInstanceメソッドに関係しているのではないかと思います

public static同期ImageCache getInstance(){

if(_instance == null){_instance = new ImageCache(); } return _instance; }

役に立ちましたか?

解決

私は今お尻のように感じていますが、私は自分のハンドラーの間違った方法を呼んでいました...

間違ったやり方

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

正しい方法

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

したがって、どういうわけか、メッセージは背景のものではなくUIスレッドのすぐ上で、まだハンドラーを介して実行されていました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top