Android - 使用图像资源背景动态构建UI时内存泄漏

Ric*_*ich 8 java android memory-leaks memory-management virtual-machine

我有一个活动,我发誓泄漏记忆.我正在处理的应用程序对图像做了大量工作,所以在直接使用Bitmaps时,我必须非常吝啬内存.我添加了一个Activity,现在如果你使用这个新的Activity它基本上让我超过了mem使用的边缘,我最终抛出"Bitmap超过VM预算"异常.如果您从未启动此活动,那么一切都很顺利.

我开始阅读有关内存泄漏的内容,我认为我的情况类似于Android文档中的文章所描述的内容.我正在动态创建一堆图像视图,并从资源添加BackgroundDrawable并添加OnClickListener.我想当Activity在其生命周期中点击onPause时我必须做一些清理,但我想知道具体的方法是什么.

这是应该演示我正在使用的对象的代码...

    LinearLayout templateContainer;
    .
    .
    .
    ImageView imgTemplatePreview = (ImageView) item.findViewById(R.id.imgTemplatePreview);
    .
    .
    .
    imgTemplatePreview.setBackgroundDrawable(getResources().getDrawable(previewId));
    imgTemplatePreview.setOnClickListener(imgClick);
    templateContainer.addView(item); 
Run Code Online (Sandbox Code Playgroud)

jjb*_*jjb 0

这听起来有点奇怪,但我在处理在与 Activity 的处理程序关联的线程以外的线程上执行任何位图操作的应用程序时遇到了麻烦。特别是,我有一个应用程序通过在 java.util.Timer 线程中进行图像操作而泄漏大量内存。当我将该代码迁移到使用 Handler.postDelayed 时,内存问题就自行解决了。