Android - 来自非 UI 线程的离屏绘图

标签 android multithreading android-canvas

简短版

是否允许,还是我需要使用 UI 线程?

编辑:最好引用官方 android 文档中的某个位置。

长版

Android 文档明确指出不允许“从 UI 线程外部访问 Android UI 工具包”。

另一方面,似乎允许从工作线程创建 Bitmap 对象,至少它是在示例代码中完成的: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html 显然,就线程而言,Bitmap 类不被视为“UI 工具包”的一部分。

我有一段代码,当从非 ui 线程调用时,似乎 可以正常工作。它涉及使用 Bitmap.createBitmap(int,int,Bitmap.Config)、new Canvas(bitmap)、Typeface.create() 和文本绘制。我的代码不引用任何 View 对象。

有人能给我指点一份说明我可以从后台线程执行这些操作的文档吗?或者这样做会导致随机崩溃吗?

最佳答案

UI工具包是指Google提供的按钮、标签、 ListView 等UI。您不能从非 ui 线程访问它们,主要是因为它们不是线程安全的。

您正在做的不是在 UI 工具包上,而是在允许(实际上应该允许)从非 UI 线程访问的低级 Canvas 上。这种机制一直被用在游戏开发中。所以我相信你是安全的。

关于Android - 来自非 UI 线程的离屏绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288155/

相关文章:

android - 如何突出显示位图?喜欢谷歌播放

android - Paint.setAntiAlias(false) 没有效果?

android - 使用 DataBinding 的无参数 OnClick 方法调用

java - 提高共享元素转换速度

c# - 使用未知大小队列的网络爬虫的生产者/消费者

c++ - 使用线程编程时出现 std::thread::_Invoker 错误

java - 为什么 postRotate() 方法改变 X 轴方向

java - ZXing Result.getRawBytes(),到底是什么?

android - Sencha Touch 2 - 选择照片

c - Windows 套接字似乎是非双工的