ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – Android:关于movie.draw的0x00000000(代码= 1)的致命信号11(SIGSEGV)

2019-06-09 13:11:19  阅读:374  来源: 互联网

标签:java android fatal-error samsung-mobile


我试图在onDraw方法中使用Android Movie类在ImageView中显示动画gif,如下所示:

   @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.TRANSPARENT);
        super.onDraw(canvas);
        long now = android.os.SystemClock.uptimeMillis();
        if (movieStart == 0) {
            movieStart = now;
        }
        movie = getMovieFromGif();
        if (movie != null && movie.duration() > 0) {
            try {
                int relTime = (int) ((now - movieStart) % movie.duration());
                movie.setTime(relTime);

                float movie_height = convertDpToPixels(movie.height());
                float movie_width = convertDpToPixels(movie.width());

                float new_movie_height = movie_height;
                float new_movie_width = movie_width;
                float movie_ratio = movie_width / movie_height;

                if (new_movie_width > container_width) {
                    new_movie_width = container_width;
                    new_movie_height = new_movie_width / movie_ratio;
                }

                if (new_movie_height > container_height) {
                    new_movie_height = container_height;
                    new_movie_width = new_movie_height * movie_ratio;
                }

                float scale_x = container_width / new_movie_width;
                float scale_y = container_height / new_movie_height;

                scale_x = new_movie_width / (float) movie.width();
                scale_y = new_movie_height / (float) movie.height();

                canvas.scale(scale_x, scale_y);
                float x = 0;
                if ((float) this.getWidth() > new_movie_width) {
                    x = ((this.getWidth() - (movie.width() * scale_x)) / 2f)
                            / scale_x;
                }

                movie.draw(canvas, x, 0);
                this.invalidate();
            } catch (Exception ex) {
                Log.i("onDraw()", "Error: " + ex.getMessage());
            }
        }
}

代码在大多数设备上运行良好,但在华为Ascend P7和三星galaxy a5上,应用程序在movie.draw(canvas,x,0)上崩溃,但有异常:

A/libc(23632): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1),
thread 23632

知道movie.draw在这些设备上有什么问题吗?

更新:
以下是完整的堆栈跟踪

04-29 12:09:24.979: D/Activity(18951): #2 setTransGradationModeColor
to true
04-29 12:09:25.049: I/Adreno-EGL(18951):
: EGL 1.4 QUALCOMM build: ()
04-29
12:09:25.049: I/Adreno-EGL(18951): OpenGL ES Shader Compiler Version:
E031.24.02.07
04-29 12:09:25.049: I/Adreno-EGL(18951): Build
Date: 08/06/14 Wed
04-29 12:09:25.049: I/Adreno-EGL(18951): Local
Branch: rb1
04-29 12:09:25.049: I/Adreno-EGL(18951): Remote
Branch:
04-29 12:09:25.049: I/Adreno-EGL(18951): Local Patches:

04-29 12:09:25.049: I/Adreno-EGL(18951): Reconstruct Branch:

04-29 12:09:25.079: D/OpenGLRenderer(18951): Enabling debug mode
0
04-29 12:09:25.109: D/skia(18951): streamToByte : Input agif
image larger than 30MB.
04-29 12:09:25.109: D/skia(18951):
streamToByte : Quram agif – length : 10473
04-29 12:09:25.109:
D/skia(18951): Wink AGIF Move Constructer End 9, totalTime : 2700
04-29 12:09:25.109: A/libc(18951): Fatal signal 11 (SIGSEGV) at
0x00000000 (code=1), thread 18951 (com.android.gif)

在执行代码movie.draw()之后发生致命信号错误,rest是在movie.draw()之前执行行的堆栈跟踪.

解决方法:

我能够通过禁用Android硬件加速来解决这个问题:

android:hardwareAccelerated=”false”

标签:java,android,fatal-error,samsung-mobile
来源: https://codeday.me/bug/20190609/1205100.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有