我有一个问题。我在网站上快速搜索,但没有找到答案。 我们开发运行Android 2.2及更高版本的应用程序。对于视图自定义,我们使用许多drawable,以这种方式使用:
<LinearLayout ...
android:background="@drawable/some_drawable"/>
我们也使用地图并使用内存中的许多数据进行操作,我们的应用程序变得沉重。在顶级设备上,它工作得很好,但在其他设备上使用我们的应用程序几分钟后我们得到了OutOfMemory异常。看起来我们有内存泄漏。 我正在尝试减少应用程序的内存使用量。问题,我们是否需要在破坏我们的活动时手动清理资源:删除可绘制的视图,或系统为我们制作?
答案 0 :(得分:3)
我也在我的应用中遇到过这个问题。如果在活动中使用了大量位图,并使用缩放和/或其他位图操作,则会抛出OutOfMemoryError
。我所做的是将以下代码添加到我的活动中,这似乎使问题不那么频繁出现(它没有解决它的好处)并且应用程序现在在合理的低端手机上运行没有错误。
@Override
protected void onDestroy()
{
super.onDestroy();
// explicitly release media player
if(viewObjectInfo != null)
viewObjectInfo.releaseMediaPlayer();
//explicitly release all drawables and call GC
unbindDrawables(findViewById(R.id.main));
System.gc();
}
/**
* Unbinds all drawables in a given view (and its child tree).
*
* @param findViewById Root view of the tree to unbind
*/
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
try
{
((ViewGroup) view).removeAllViews();
}
catch(UnsupportedOperationException ignore)
{
//if can't remove all view (e.g. adapter view) - no problem
}
}
}