android错误信号11

yws3nbqq  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(352)

我正在开发一个android应用程序,试图在其中显示gif图像。为此,我使用movie类并创建了一个扩展视图的类视图。我正在从movie.decodefile方法获取电影示例。
调用movie.draw(canvas)时出错。

04-28 13:44:18.001: A/libc(24883): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 24883 (mple.channel002)

有相关代码:

public void setGif(File gif)
    {
        movie = Movie.decodeFile(gif.getAbsolutePath());
    }

    @Override
    public void draw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.draw(canvas);
        canvas.drawColor(0xFFCC3C6C);            

        if(movie != null)
        {
            if(movieStart == 0)
                movieStart = android.os.SystemClock.uptimeMillis();
            int duration = Math.max(movie.duration(), 1000);
            movie.setTime((int)(duration - ((android.os.SystemClock.uptimeMillis() - movieStart)%duration)));

            movie.draw(canvas, 10, 10);//TODO CRASH

            invalidate();
        }
    }

我在main中创建了一个gifview,调用上面的setgif方法为其指定路径,并使用fillparent参数将其添加到布局中。当我在imageview中打印此图像时,它会起作用。在画布上绘制一个可绘制的图形,而不是在gif上。所以这个问题似乎涉及到电影示例。
我使用这些链接来创建gif视图http://weavora.com/blog/2012/02/07/android-and-how-to-use-animated-gifs/
我也尝试过这种方式,但在movie.draw上出现了相同的错误,关于android的movie类
edit1:我在android 4.4.2/snapdragon 801/2gb上的oppofind7a上做测试,把draw(canvas,10,10)变成电影,draw(canvas,10f,10f)什么都没变。
edit2:我刚刚在一台搭载android 2.3.5的旧中兴手机上测试了一下,效果不错。。所以在find7a设备上启动时出现了问题,但我不知道是什么:(

nqwrtyyt

nqwrtyyt1#

我找到了另一个解决方案-你必须禁用硬件加速器只有在这个特定的看法,你画的电影。使用下一行:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

参考(视图级别)https://developer.android.com/guide/topics/graphics/hardware-accel.html#controlling

50few1ms

50few1ms2#

终于!我找到了答案,似乎在一些android版本或设备上需要禁用硬件加速。
我刚在我的名单上加了这个:

<application android:hardwareAccelerated="true" ...>

有关使用启用/禁用硬件加速的更多信息,请参见此处。

相关问题