在非 UI 线程上实例化视图

2024-01-17

我知道 UI 元素(视图层次结构)只能从 UI 线程进行操作。对于后台操作,可以使用 AsyncTask,它提供事件处理程序来到达 UI 线程。

简而言之,是否允许实例化视图(绑定到getApplicationContext()) 在非 UI 线程中?这个自定义视图后代——一旦实例化——就会被添加到视图层次结构中用户界面线程。所以只有构造函数调用是在一个内部完成的Asynctask.doInBackground();它正在附加(addView(...))到 Activity 的根布局层次结构仍然在 UI 线程中完成。

详细信息:

public MyView extends View {
     public MyView(Context context) { 
            ...
     }
...
}
  1. 我做了一个自定义视图,并覆盖了onDraw(...) etc.

  2. 当用户单击我的主 Activity 中的某个 MenuItem 时,会创建并显示另一个 Activity (MyOtherActivity)哪个屏幕正是 MyView

  3. 由于 MyOtherActivity 的屏幕必须立即显示,因此当用户位于主 Activity 中的其他位置时(即,他尚未单击该 MenuItem),我在 AsyncTask 中预先实例化 MyView。 MyView 引用存储在静态数据成员中。

  4. When MyOtherActivity.onCreate()被调用时,它的构造函数代码从静态中获取 MyView,并通过以下方式将其添加到其布局根层次结构中:addView(...).

  5. (我知道静态变量可能会引入内存泄漏,所以我将其设置为null一旦不需要。)

MyView 在不同的线程中实例化(并获取返回值),这不是一个问题(并且可能会引入意外的问题)getApplicationContext()在其构造函数中)?


最终答案出现在文档中View http://developer.android.com/reference/android/view/View.html,在“事件处理和线程”标题下:

注意:整个视图树是单线程的。在任何视图上调用任何方法时,您必须始终位于 UI 线程上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在非 UI 线程上实例化视图 的相关文章

随机推荐

  • 检测FLASH插件崩溃

    有没有办法通过javascript检测主要浏览器 firefox ie chrome safari和opera 中的flash插件崩溃 我不确定这是否有效 您可以定期获取 Flash 对象的引用并检查它是否具有 SetVariable 方法
  • IBM Worklight 5.0.5 - 在推送通知上播放自定义声音

    当我使用 WL Server notifyAllDevices userSubscription badge 1 sound notification wav activateButtonLabel ClickMe alert notifi
  • PyQt:app.exec_() 停止运行以下所有代码

    我有一个代码 如下所示 app QApplication sys argv self interface Interface The figure self fig self interface fig self ax self fig a
  • 如何从列表中仅获取特定字段

    我有一个 IEnumerable 的 Lesson 对象 IEnumerable
  • 在 JSON 驱动的 jQuery 数据表中转义标记?

    我正在使用一个jquery数据表 http datatables net 这是使用动态加载一些 JSONsAjaxSource财产 一切都很好 除了加载的内容被视为潜在的标记 因此如果单元格中的文本包含 lt 或类似的东西 在将数据加载到表
  • Html.DropDownList 选定值不起作用(将构造函数与 IEnumerable 一起使用)

    我遇到的问题是所选值不适用于 Html DropDownList 帮助程序方法 见下文 这是我的控制器 public ActionResult Edit int id 0 NewsEvent item GetItem id ViewBag
  • 将 csv 文件导入 Excel 时,文本会转换为数字

    我使用如下方式将 CSV 文件导入到 Excel 2010 电子表格中 Set wb Workbooks Open Filename myFile ReadOnly True Notify False Set ws wb Worksheet
  • Numpy 相邻元素之间的差异

    我有纯Python中相邻元素之间差异的计算算法 a range 1000000 it s numpy array in my case prev a 0 b 0 for i in a 1 b append i prev prev i 有没有
  • 数据表scrollX水平不起作用

    我有以下表格 其中包含 10 多列 我正在使用数据表来显示数据 我使用水平滚动 因为我有很多列 但卷轴没有显示出来 请帮忙 这是我的桌子的屏幕截图 滚动不起作用 https i stack imgur com HBGF9 png table
  • 静态成员函数的模板特化;如何?

    我正在尝试使用模板专业化以不同的方式实现带有 void 句柄的模板函数 以下代码为我提供了 gcc 中的 非命名空间范围内的显式专业化 template
  • XNA 在运行时在 Texture2D 上绘制/绘制

    早安 如果你所在的地方是早上的话 我一直在环顾四周 但没有找到令人满意的方法 所以我想我会四处询问 理想的世界我希望能够生成一个透明的Texture2D对象 将其绘制到屏幕上我希望能够 绘制 它 即当鼠标左键按下时 光标所在的任何像素都应设
  • 在 AngularJS 服务中编写函数

    我想在 angularjs 服务中编写一个函数 并且我想在我的所有服务中重用它 控制器 var mod angular module myapp eventFilters highlight event dayfilter Services
  • 数字在数组中出现的次数

    我在一本 C 书中找到了一个练习 上面写着 编写一个函数来计算一个数字在数组中出现的次数 一切都很好 程序正在运行 但练习还表明该函数应该是递归的 我怎样才能使递归函数像这样工作 include
  • 是否定义了两个 NULL 指针相减的行为?

    如果两个非 void 指针变量都是定义的 根据 C99 和 或 C 98 它们之间的区别是NULL valued 例如 假设我有一个如下所示的缓冲区结构 struct buf char buf char pwrite char pread
  • 函数式反应式编程语言规范

    我正在考虑在某个时候创建 一个功能性反应框架 我已经阅读了很多相关内容并看到了一些示例 但我想清楚地了解这个框架必须做什么才能被视为 FRP 扩展 dsl 我并不真正关心实施问题或细节等 但更关心完美世界情况下需要什么 理想的函数式反应式编
  • Zapier频繁10.01秒超时

    我从 Zap 获取数据 从中构造一个 http 请求的 xml 正文 并将该 http 请求发送到基于 SOAP CRM 的外部服务器 该脚本通常会成功运行 但偶尔会出现错误 Traceback most recent call last
  • 为什么 getElementsByTagName() 总是返回一个数组?

    为什么如果我只有一个h1文档中的元素 我还必须使用索引来访问吗 就像下面这样不行 document getElementsByTagName h1 innerHTML SHUSHAN 但如果我这样做 document getElements
  • 使用 Workbench 创建新的 MySQL 数据库

    我只是想用一些简单的表创建一个新的 MySQL 数据库 我在 Workbench 中创建了一个新的 EER 模型 因此我对我想要的数据库进行了建模 其中包含我需要的所有表 字段 我没有看到任何方法可以采用模型并从中创建实际的数据库 现在它刚
  • R - trunc() 函数对于具有大量小数的浮点数不一致?

    我有 R 版本 4 1 2 2021 11 01 它似乎trunc 当输入数字有大量小数值时 函数不一致 trunc 3 99999999999999977799999999999999999999900 1 4 trunc 3 99999
  • 在非 UI 线程上实例化视图

    我知道 UI 元素 视图层次结构 只能从 UI 线程进行操作 对于后台操作 可以使用 AsyncTask 它提供事件处理程序来到达 UI 线程 简而言之 是否允许实例化视图 绑定到getApplicationContext 在非 UI 线程