android - 使用独立线程 Android 在 Canvas 上绘图

标签 android multithreading canvas

您好,我正在尝试使用 SurfaceView 和 Threads 以便在 Canvas 上更快地绘制。到目前为止,我已经通过简单地扩展 View 类并在 onDraw 方法中绘制来完成在 Canvas 上绘制。此外,如果用户通过键盘进行输入(通过将键码从 Activity 传递到自定义 View ),我可以重绘 Canvas 。

问题是我坚持使用多线程,我用 SurfaceView 替换了 View 类并实现了 Runnable(遵循 this 教程)。但如果发生键输入,我无法传递键码。另外,如果我在自定义 View 上调用 invalidate() 方法,则什么也不会发生。与教程代码和我的唯一区别是我在 while 循环的结尾添加了这一行:

retry = false;

为了在绘图后停止执行线程。并在每次点击 Activity 后添加这一行,以便我可以重新绘制所有内容。

view.resume();

问题: -view 不会在关键事件上失效并且不会绘制新图像(不确定为什么)

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

  • 如何让这个应用程序在启动时自动执行,然后仅在点击时执行?

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

附注我需要发布代码示例,请告诉我,我会在测试应用程序中附加 git 存储库。

谢谢

最佳答案

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

另一件事,对于 bool 标志和多线程,您应该使用关键字 volatile 来进行一些 VM 优化。

volatile boolean retry = false;

关于android - 使用独立线程 Android 在 Canvas 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246699/

相关文章:

c++ - 适合 BitTorrent 客户端的多线程模型?

javascript - Canvas 删除不起作用

javascript - 如何从较小的 Canvas 上获得高分辨率图像?

android - 最好的手机来测试自己开发的 android 应用程序?

android - 在 Android 中裁剪图像(Crop Intent)

android - 如何将 Crashlytics 与 Android Instant Apps 集成?

python - python中ThreadPool中每个线程的超时

java - GetMap() 在使用 Google Maps API v2 的 Android 上返回 null

java - 正确调用 Hashmap 的 get() 和 put() 方法。

javascript - 拉斐尔,用图像填充背景 (fillfit)