【发布时间】:2017-09-16 14:42:28
【问题描述】:
您好,我正在尝试使用 SurfaceView 和 Threads 以便在 Canvas 上更快地绘制。到目前为止,我已经通过简单地扩展 View 类并在 onDraw 方法中绘制来完成在画布上绘图。此外,如果用户通过键盘进行输入(通过将键码从活动传递到自定义视图),我可以重绘画布。
问题是我被多线程困住了,我用 SurfaceView 替换了 View 类并实现了 Runnable(遵循this 教程)。但如果发生键输入,我无法传递键码。此外,如果我在自定义视图上调用 invalidate() 方法,则不会发生任何事情。与教程代码和我的唯一区别是我在 while 循环的末尾添加了这一行:
retry = false;
为了在绘图后停止执行线程。并在每次点击活动后添加此行,以便我可以重新绘制所有内容。
view.resume();
问题: -view 不会在关键事件上失效,也不会绘制新图像(不知道为什么)
如果我通过调用 thread.join() 来停止线程;方法,CustomView中的其他对象会留在堆内存中还是会被销毁?
如何让这个应用在启动时自动执行,之后只在点击时执行?
如果我在 view.resume() 之前显式调用,为什么 invalidate 方法不会清除画布?
附言我需要发布代码示例,请告诉我,我会将 git repo 与测试应用程序一起附加。
谢谢
【问题讨论】:
标签: android multithreading canvas