我正在從一個應用程序使用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