首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像处理时进程崩溃(信号11)

图像处理时进程崩溃(信号11)
EN

Stack Overflow用户
提问于 2010-11-25 17:17:16
回答 2查看 1.8K关注 0票数 0

我的应用程序中有3个图片资源。在ImageView中加载和显示它们中的任何一个都很顺利。但是,当我从布局中删除显示的ImageView,将其设为空并添加一个新图像时,事情变得很奇怪。

要么当我尝试在旧的位图上调用.recycle()时,进程完全崩溃(信号11),要么我得到一个OutOfMemoryError,以防我不使用循环。

这只在API级别低于8的情况下发生,所以我猜测是本机堆上的GC错误引起的,这些错误已修复到2.2。然而,由于2.1是目前最常见的版本,我需要一个变通办法……

同样,本机堆不应该缺少内存。我一次只保存一个图像,并且前一个图像为空,因此GC应该能够检索堆空间(就像在2.2中发生的那样)。

我已经创建了一个非常小的示例应用程序,可以从这里下载:http://www.4shared.com/file/QqHrhJLR/BitmapRecycleTest.html

任何建议都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-25 18:53:26

我看过了。我在运行2.2.1的Nexus One上收到信号11。callstack是这样的:

代码语言:javascript
复制
I/DEBUG   (   56):          #00  pc 0000c584  /system/lib/libc.so
I/DEBUG   (   56):          #01  pc 0000cd2e  /system/lib/libc.so
I/DEBUG   (   56):          #02  pc 0002c5dc  /system/lib/libskia.so
I/DEBUG   (   56):          #03  pc 00068108  /system/lib/libskia.so
I/DEBUG   (   56):          #04  pc 00063a8c  /system/lib/libskia.so
I/DEBUG   (   56):          #05  pc 0004cefc  /system/lib/libandroid_runtime.so
I/DEBUG   (   56):          #06  pc 00016e34  /system/lib/libdvm.so
I/DEBUG   (   56):          #07  pc 000452c4  /system/lib/libdvm.so
I/DEBUG   (   56):          #08  pc 0001bd98  /system/lib/libdvm.so
...

显然,Android在这里有一个bug,但它似乎是可以避免的。

不要使用您的BitmapResource类...您应该在不再需要位图的时候显式地回收()位图。我将您的DrawView构造函数更改为:

代码语言:javascript
复制
public DrawView(Context context, int resId) {
    super(context);
    setImageResource(resId);
}

因为你的图片太大了-- 7MB的解压!--我还在前一个图片被删除后添加了一个System.gc()buttonClickHandler现在看起来像这样:

代码语言:javascript
复制
public void buttonClickHandler(View v) {
    Object tagObj = mSwitchButton.getTag();
    if (tagObj != null && tagObj instanceof ImageView) {
        ImageView iv = (ImageView)tagObj;
        iv.setImageBitmap(null);
            mMainLayout.removeView(iv);
        System.gc();
    }

    addNewViewToLayout(mMainLayout);
}

有了这些改变,你的应用程序对我来说运行得很好。

票数 1
EN

Stack Overflow用户

发布于 2011-02-12 03:48:43

伙计,试着以某种方式清除图像缓存...我也有类似的问题。这是我的帖子SIGNAL 11 SIGSEGV crash Android

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

https://stackoverflow.com/questions/4275383

复制
相关文章

相似问题

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