大きなビットマップを構成する多数のタイルをロードするシングル スレッド アプリを最適化しようとしています。新しいタイルをシステム メモリにロードするときに、アプリの動作が非常に遅くなっていました。この目的で非同期タスクを使用しようとしています。アプリは、onDraw によって呼び出されるメソッドで左上にあるタイルを検出し、Assets フォルダーにビットマップのパスを含む文字列を作成し、描画する前にビットマップが null かどうかを確認します。null の場合は、メモリにロードします。私のアイデアは、DoBackground でビットマップを処理し、postExecute でビューの無効化をトリガーして、非同期に読み込まれたビットマップを表示することでした。いくつかの質問:
1.) ビットマップごとに aSync タスクを実行できますか? (このステートメント: new myAsyncTaskManager().execute(bitmapPath); そうでない場合、aSync が行う唯一のことはビットマップをメモリにロードすることだけなので、最善の方法は何でしょうか?
2.) ビットマップの読み込みが遅すぎる場合、優先度 aSyncTask を設定することは可能ですか?
3.) これを行うためのより良い方法はありますか? アプリの速度を低下させるのはキャンバスの描画ではなく、ビットマップの読み込みであることは確かです。
私の一時的な aSync コード:
private class myAsyncTaskManager extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... bitmapPath) {
Log.e("sys","i ran using aTask");
try {
bitmapArray[rectBeingDrawn] = BitmapFactory.decodeStream(assetManager.open(imagePathToLoad));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
mCampusMap.invalidate();
}
}