【发布时间】:2015-03-31 23:12:29
【问题描述】:
我正在创建一个以循环方式显示图像视图的应用程序。它显示设置的图标,例如蓝牙、wifi 等。没有内存不足错误,但完成活动后,应用程序仍然使用大约。根据内存分析器工具,位图上有 15mb RAM。如何,我可以释放那些位图。
这是创建圆形视图的代码:
settingsImageViews = new ArrayList<View>(0);
// create settings icon views
for (int i = 0; i <= 12; i++) {
ImageView imageView = new ImageView(this);
if (i > 2 && i != 10) {
imageView.setImageDrawable(getSettingsIcon(i - 3));
} else if (i == 10) {
imageView.setImageDrawable(getResources().getDrawable(R.drawable.ic_key));
} else {
imageView.setImageDrawable(null);
}
settingsImageViews.add(imageView);
}
settingsCircularView = new CircleView(this, CIRCLE_RADIUS, settingsImageViews);
parentLayout.addView(settingsCircularView);
对于圆形视图,我使用此代码:custom circular view. placing of views
getSettingsIcon 方法:
private Drawable getSettingsIcon(int settingId) {
switch (settingId) {
case 0:// bluetooth
if (PhoneSetting.isBluetoothOn())
return getResources().getDrawable(R.drawable.ic_bluetooth);
else
return getResources().getDrawable(R.drawable.ic_bluetooth_off);
case 1:// wifi
if (wifiManager.isWifiEnabled())
return getResources().getDrawable(R.drawable.ic_wifi_on);
else
return getResources().getDrawable(R.drawable.ic_wifi_off);
.
.
.
}
}
我尝试在onDestroy 方法中回收位图,但是当我重新打开活动时,它由于trying to use a recycled bitmap android.graphics.Bitmap 错误而崩溃。
我什至尝试致电System.gc(),但该应用仍使用 15mb RAM。
我还在使用unbindDrawables 方法销毁onDestroy 中的所有视图:
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
在尝试了上述所有方法之后,甚至 1 mb 都没有减少。这些资源也使用大约。 4.5 mb。
【问题讨论】:
标签: android memory-management memory-leaks bitmap android-bitmap