如果我发布画布并离开应用程序,则会出错

时间:2014-12-19 14:11:17

标签: android multithreading canvas

我在一个额外的线程中将一个画布渲染到一个surfaceview,它处理画布的锁定和解锁。 因为如果我使用homebutton切换到主屏幕我的应用程序崩溃(错误:nullpointerexception,canvas为null)我确定在计算画布不为null之前。 所以我这样做:

    @Override
public void run(){
    while(running){
        Canvas canvas = this.holder.lockCanvas();
        if(canvas != null) {
            this.render.canvas = canvas;
            this.render.RenderOneStep();
        }
        this.holder.unlockCanvasAndPost(this.render.DisplayResult());
        this.view.postInvalidate();
    }
}

但如果我切换到主屏幕,我会收到这个奇怪的错误:

  

12-19 15:09:52.333 11190-11208 / com.example.standardbenutzer.adelpath A / libc:致命信号11(SIGSEGV)位于0x00000000(代码= 1),线程11208(线程-1006)

     

12-19 15:09:52.387 11190-11208 / com.example.standardbenutzer.adelpath A / libc:发送停止信号到pid:11190 in void debuggerd_signal_handler(int,siginfo_t *,void *)

任何想法如何让它发挥作用?

1 个答案:

答案 0 :(得分:0)

关闭onStop中的渲染线程并在onStart

中重新启动它

不确定这是否能解决您的问题

当我在画布上渲染时,我总是在我的活动被销毁时停止渲染线程(onStop或onDestroy),并在我重新进入活动时再次启动它。

我保持对执行canvas lock unlockAndPost逻辑的runnable类的引用。 当我退出时,我在runnable上调用一个方法来结束渲染线程。

在你的情况下改变"运行"变量为false。

我做的另一件事是检查画布对象的宽度是否> 0和高度> 0 如果画布没有宽度或高度,我会跳过渲染。我在某些设备上看到了这一点,但仍不确定原因。

我遇到了类似的问题,这是因为访问与渲染例程中的活动相关的视图(而不是画布)信息。