我正在将一个画布呈现给一个额外线程中的表面视图,它处理画布的锁定和解锁。因为我的应用程序会崩溃,如果我切换到主屏幕上的主屏幕上有make按钮(错误: nullpointerexception,画布是空的),所以在计算画布不为空之前,我要确保它是空的。所以我就这样做:
@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 (code=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*)
我有什么办法让它起作用吗?
发布于 2014-12-19 14:48:54
在onStop中关闭呈现线程,然后在onStart中再次启动它
不确定这是否能解决你的问题
当我在画布上进行渲染时,我总是在活动被破坏时停止呈现线程( onStop或onDestroy ),并在重新输入该活动时再次启动它。
我保留对执行画布锁unlockAndPost逻辑的runnable类的引用。当我退出时,我调用runnable上的一个方法来结束呈现线程。
在您的情况下,将“运行”变量更改为false。
另一件事是检查画布对象的宽度>0和高度>0,如果画布没有宽度或高度,我跳过呈现。我在一些设备上看到了这个,但还是不知道为什么。
在访问视图(而不是画布)信息时,我遇到了一个类似的问题,这与我的呈现例程中的活动有关。
https://stackoverflow.com/questions/27567803
复制相似问题