我的应用程序有很多位图。我试过了从Android培训到的所有东西,但我的应用程序仍然有OOM errors
。
我的activity A
有一个列表视图,其中包含一个图像列表。单击时,它将打开一个新的activity B
。
Activity B
提供了该图像的详细信息和推荐图像列表。点击下面列出,打开新的活动等等.
我做了一切,以尽量减少内存,但应用程序崩溃后,打开6-8活动。所以,任何人都可以帮助我在打开新的活动时如何清除先前活动的位图内存?
抱歉,我的英语不好
发布于 2014-10-31 08:52:26
您可以在您的bitmap.recycle()
中使用onDestroy()
。
此外,您还可以在onDestroy()
中使用此代码来避免OOMExceptions
。这基本上解除了您的活动中的所有图像:
public void unbindDrawables(View view) {//pass your parent view here
try {
if (view.getBackground() != null)
view.getBackground().setCallback(null);
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
imageView.setImageBitmap(null);
} else if (view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++)
unbindDrawables(viewGroup.getChildAt(i));
if (!(view instanceof AdapterView))
viewGroup.removeAllViews();
}
} catch (Exception e) {
e.printStackTrace();
}
}
发布于 2014-10-31 08:53:27
我假设您的清单中没有任何特殊标志,所以它总是打开一个新实例。
您可以在活动中使用android:launchMode="singleTask"
来确保只加载一次。然而,我认为在你的例子中,最好是使用片段,并且只保存一次对图像的引用。
通常,当您不释放对图像的引用时,就会得到OOM errors
。如果不看到处理图像的代码,就很难提供更多的细节。
https://stackoverflow.com/questions/26670549
复制相似问题