您好我正在尝试使用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。
由于
答案 0 :(得分:0)
在android中,你可以使用Handler类来发送消息,在你想要接收的Thread中创建它并在你使用sendMessage的其他线程上实现handleMessage。
另一方面,对于布尔标志和多线程,您应该使用关键字volatile来进行某些VM优化。
volatile boolean retry = false;