我正在从一个应用程序使用AsyncTask + for循环加载大量的SD卡图像,我测试了我的Galaxy Nexus上的应用程序,该应用程序工作完美,但它会崩溃,如果我使用超过33循环Android AsyncTask Overload
我的问题是:是否有使用AsyncTask ???的限制,,,在我的代码中是否有任何错误导致33循环崩溃?
请大家帮忙,这里是我的代码:
ImageView iv;
TextView tv;
String picsDir;
int picsAmount;
String [] list;File dir;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//images folder
picsDir = Environment.getExternalStorageDirectory().toString()+"/aFolder";
// total images
picsAmount = 70;
iv = (ImageView)findViewById(R.id.iv);
tv = (TextView)findViewById(R.id.tv);
list = new String [picsAmount];
dir = new File (picsDir);
// String array of my images names
list = dir.list();
new loadingImgs().execute(list);
}
class loadingImgs extends AsyncTask<String, Void, Drawable>{
@Override
protected void onPreExecute() {
// nothing
super.onPreExecute();
}
@Override
protected Drawable doInBackground(String... params) {
String dir1 = Environment.getExternalStorageDirectory().toString()+"/aFolder";
String[] theList = params;
Bitmap[] bmp = new Bitmap[picsAmount];
Drawable[] drw = new Drawable[picsAmount];
tv.setText("dir1="+dir1+" found= "+picsAmount);
File dir = new File(dir1);
for (int i = 0; i < picsAmount; i++){
bmp[i] = BitmapFactory.decodeFile(dir+"/"+theList[i]);
drw[i] = new BitmapDrawable(getResources(), bmp[i]);
}
return drw[0];
}
protected void onPostExecute(Drawable result) {
// set drw[0] as iv image
iv.setImageDrawable(result);
};
}
}
您能否具体说明“崩溃”是什么意思?你可以发布你的堆栈跟踪吗? – 2015-02-08 19:37:26
它与内存溢出异常崩溃? – Leonidos 2015-02-08 19:41:46
是的,除非这些图像很小,否则可能是内存不足。没有真正的解决方案,除了一次不加载多个图像。你是否真的需要在屏幕上同时使用它们?如果没有的话,一个LRUCache可以保存屏幕上的内容并按需加载,效果会更好。 – 2015-02-08 19:43:16