我一直在尝试优化我的单线程应用程序,它加载了一堆构成大位图的图块。当应用程序将新图块加载到系统内存中时,它变得非常缓慢。我现在正在尝试为此目的使用异步任务。该应用程序在 onDraw 调用的方法中检测左上角的图块,在 Assets 文件夹中创建一个包含位图路径的字符串,然后在绘制之前检查位图是否为空。如果它为空,它会将其加载到内存中。我的想法是在 DoBackground 中处理位图,并在 postExecute 中触发视图无效以显示异步加载的位图。几个问题:
1.) 我可以为每个位图执行我的 aSync 任务吗?(此语句: new myAsyncTaskManager().execute(bitmapPath); 如果不是,那么最好的方法是什么,因为 aSync 唯一要做的就是将位图加载到内存中?
2.) 如果位图加载太慢,是否可以设置优先级 aSyncTask?
3.)有没有更好的方法来解决这个问题?我确定是位图加载,而不是画布绘图减慢了应用程序的速度。
我的临时异步代码:
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();
}
}