使用单独的线程Android在画布上绘图

时间:2017-09-15 19:57:04

标签: android multithreading canvas

您好我正在尝试使用SurfaceView和Threads以便在Canvas上绘制得更快。到目前为止,我已经完成了在画布上绘制,只需扩展View类并在onDraw方法中绘制。此外,如果用户通过键盘输入(通过将键代码从活动传递到自定义视图),我可以重绘画布。

问题是我遇到了多线程问题,我已经用SurfaceView替换了View类并实现了Runnable(后面是this教程)。但是如果发生了键输入,我就无法传递密码。此外,如果我在自定义视图上调用invalidate()方法,则没有任何反应。与教程代码和我的唯一区别是我添加到while循环结束这一行:

retry = false;

为了在绘图后停止执行线程。并且在每次单击活动后添加此行,以便我可以重新绘制所有内容。

view.resume();

问题:  -view不会对关键事件无效,也不会绘制新图像(不确定原因)

  • 如果我通过调用thread.join()来停止线程;方法,CustomView中的其他对象会保留在堆内存中还是会被销毁?

  • 如何让这个应用程序在开始时自动执行,之后只在点击时执行?

  • 为什么如果我在view.resume()之前显式调用,invalidate方法不会清除画布?

P.S。我需要发布代码示例,请告诉我,我会将测试应用程序附加git repo。

由于

1 个答案:

答案 0 :(得分:0)

在android中,你可以使用Handler类来发送消息,在你想要接收的Thread中创建它并在你使用sendMessage的其他线程上实现handleMessage。

另一方面,对于布尔标志和多线程,您应该使用关键字volatile来进行某些VM优化。

volatile boolean retry = false;