首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打开新活动时如何清除先前活动的位图内存

打开新活动时如何清除先前活动的位图内存
EN

Stack Overflow用户
提问于 2014-10-31 08:47:07
回答 2查看 2.3K关注 0票数 2

我的应用程序有很多位图。我试过了从Android培训到的所有东西,但我的应用程序仍然有OOM errors

我的activity A有一个列表视图,其中包含一个图像列表。单击时,它将打开一个新的activity B

Activity B提供了该图像的详细信息和推荐图像列表。点击下面列出,打开新的活动等等.

我做了一切,以尽量减少内存,但应用程序崩溃后,打开6-8活动。所以,任何人都可以帮助我在打开新的活动时如何清除先前活动的位图内存?

抱歉,我的英语不好

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-31 08:52:26

您可以在您的bitmap.recycle()中使用onDestroy()

此外,您还可以在onDestroy()中使用此代码来避免OOMExceptions。这基本上解除了您的活动中的所有图像:

代码语言:javascript
运行
复制
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();
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2014-10-31 08:53:27

我假设您的清单中没有任何特殊标志,所以它总是打开一个新实例。

您可以在活动中使用android:launchMode="singleTask"来确保只加载一次。然而,我认为在你的例子中,最好是使用片段,并且只保存一次对图像的引用。

通常,当您不释放对图像的引用时,就会得到OOM errors。如果不看到处理图像的代码,就很难提供更多的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26670549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档