有一个 while 循环,在该循环内调用了创建图表的函数 getCharView()。在这个函数中,BitmapFactory.decodeResource
被调用。
插入几条记录很好,但如果我尝试在我的真实设备上插入第 8 条记录,就会出现内存不足错误并且应用程序崩溃。
我知道这是因为BitmapFactory.decodeResource
每次都在循环中被调用,因此位图尺寸正在增加,这导致在某个点崩溃。
如果我将代码cv = new ChartView();linearLayoutMap.put(date, cv.getChartView());views.add(cv.getChartView());
放在循环之外,则应用程序不会崩溃,但位图的滚动会停止。
在多次插入记录后,如何停止崩溃并使滚动工作也不会崩溃?
我的相关代码:
Calendar scal = Calendar.getInstance();
scal.setTime(stDate);
Calendar cal = Calendar.getInstance();
while (scal.compareTo(cal) < 0) {
//some more lines of code.....
cv = new ChartView();
linearLayoutMap.put(date, cv.getChartView());
views.add(cv.getChartView());
}
public class ChartView {
private Paint cPaint;
public LinearLayout getChartView() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
newBitmap = BitmapFactory.decodeResource(
getResources(), R.drawable.chart_bg).copy(
Bitmap.Config.ARGB_4444, true);
canvas = new Canvas(newBitmap);
img.setImageBitmap(newBitmap);
img.setScaleType(ScaleType.FIT_XY);
float wFactor = (15 * scale);
float hFactor = (float) ((19.35) * scale);
float x1 = startHours * wFactor;
float x2 = endHours * wFactor;
float y1 = (2 * startHeight - 1) * hFactor;
float y2 = (2 * endHeight - 1) * hFactor;
canvas.drawLine(x1, y1, x2, y2, cPaint);
canvas.save(Canvas.ALL_SAVE_FLAG);
linearlayout.addView(img);
}
});
return linearlayout;
}
}