何时使用 handler.post() 以及何时使用 new Thread()

2024-03-24

我想知道什么时候应该使用handler.post(runnable);我什么时候应该使用new Thread(runnable).start();

Handler 的开发人员文档中提到了这一点:

导致 Runnable r 添加到消息队列中。可运行的 将在该处理程序所附加的线程上运行。

这是否意味着如果我写在onCreate() of Activity class:

Handler handler = new Handler();
handler.post(runnable);

那么runnable会在单独的线程中还是在Activity的线程中被调用?


你应该使用Handler.post()每当你想在 UI 线程上执行操作时。

假设您想更改TextView回调中的文本。因为回调不在 UI 线程上运行,所以您应该使用Handler.post().

在 Android 中,与许多其他 UI 框架一样,UI 元素(小部件)只能从 UI 线程进行修改。

另请注意,术语“UI 线程”和“主线程”通常可以互换使用。


编辑:长时间运行的任务的示例:

mHandler = new Handler();

new Thread(new Runnable() {
  @Override
  public void run () {
    // Perform long-running task here
    // (like audio buffering).
    // You may want to update a progress
    // bar every second, so use a handler:
    mHandler.post(new Runnable() {
     @Override
     public void run () {
       // make operation on the UI - for example
       // on a progress bar.
     }
    });
  }
}).start();

当然,如果您要执行的任务非常长并且存在用户可能同时切换到其他应用程序的风险,您应该考虑使用Service http://developer.android.com/guide/components/services.html.

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

何时使用 handler.post() 以及何时使用 new Thread() 的相关文章

  • 用于 Kotlin 中单元测试的 BuildConfigField 模拟

    我正在尝试尽可能多地涵盖Kotlin Android 库我遇到了有关自定义 BuildConfig 变量的问题 更广为人知的是buildConfigField 我想模拟这个变量来测试两者true and false values 从 Gra
  • 音频流的最佳实践

    我正在编写一个应用程序来播放远程服务器的音频 我尝试了多种方法来实现流音频 但它们对我来说都不够好 这就是我尝试过的 幼稚地使用 MediaPlayer 就像是 MediaPlayer player new MediaPlayer play
  • Cordova - 启动后出现白屏,控制台中没有例外

    我已经离开我的 Cordova 应用程序一段时间了 但昨天刚刚进行了一次新的克隆 发现它出现了 死机白屏 症状 启动画面显示 程序加载 然后我就得到一个空白屏幕 更多细节 CLI 科尔多瓦 6 1 1 安卓 5 1 1 ios 4 1 1
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 嵌套 XML 布局文件

    android 有没有办法从另一个布局文件引用 xml 布局文件 为了更好地解释 我有一个名为layout1 xml 和layout2 xml 的布局文件 我可以从layout1 xml引用layout2 xml吗 用这个
  • 如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

    我从新的 Google 通知服务开始 Firebase Cloud Messaging 感谢这段代码https github com firebase quickstart android tree master messaging htt
  • 蓝牙 BLE Android 以最大吞吐量写入外设

    我们公司开发了一个具有蓝牙 BLE 的硬件单元 并且我们在 Nexus 7 2013 中有一个服务应用程序 我们希望使用它向该单元发送固件文件 文件最大可达 500kb BT芯片是德州仪器CC2540 我浏览了大量的页面 并扫描了 Stac
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • 如何绘制部分位图圆弧?类似于圆形进度轮,但具有显示得越来越多的位图。

    我正在寻找的是一种以顺时针圆形方式显示图像的视图 当进度为 25 时 应显示前 90 度 当进度为 100 时 应绘制完整的 360 度 它与使用 canvas drawArc 非常接近 但此方法仅适用于 Paint 对象 不适用于位图 其
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 如何在android中的谷歌地图上聚焦标记

    我只是想知道我们是否可以关注 Android 应用程序中添加的标记 如果是 怎么办 或者有没有其他方法可以完成这项任务 可以说我使用下面的代码添加了一个标记 map addMarker new MarkerOptions title tit
  • 如何在Android模拟器中隐藏应用程序图标?

    我有一个应用程序在启动完成后自动启动 但应用程序图标显示在android模拟器中 现在我想向用户隐藏该图标 这样用户就无法知道应用程序已启动 并且他们无法启动该应用程序手动申请 在您的 AndroidManifest xml 文件中 您可能
  • Android - 状态栏阻止全屏

    我的应用程序启动时可以全屏正确运行 然而 在最小化然后返回应用程序后 状态栏会弹出 并将我的视图向下推一点 如何防止状态栏移动我的视图 这是我的布局
  • Android 中 Activity 之间的 3D 动画

    How to create animation between two Activity look like As Screen shot in android 搜索jazzyviewpager 这是link https github co
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 如何知道我的应用程序的活动计数?

    我的应用程序中有多项活动 请考虑以下案例 Activity A 调用 Activity B B 调用 C 当用户按后退键时 C 生成通知并转到 B 现在再次按后退 因此将显示 A 再次按后退键也会终止 A 并显示通知 现在 当用户按下通知图
  • Android:透明活动问题

    最近 在我们的一款生产应用程序上 透明活动已停止工作 我的意思是它变成了黑色背景而不是透明背景 当我将活动的背景颜色设置为纯色 即红色 绿色等 时 它的应用不会出现问题 该问题可能是由于迁移到 AndroidX 引起的 但我没有这方面的证据
  • 在数组列表中过滤 Filterable 不取消之前的过滤

    我看过过滤器方法文档 其中显示调用过滤器会取消所有先前未执行的过滤请求 并发布一个稍后将执行的新过滤请求 但我收到的实际回调有些不同 在我的实现中 它不会取消先前的过滤器请求并调用publishResults 最近一次搜索条件后的上一次搜索
  • 如何正确处理 ListView 内的 Android EditText 输入?

    在我的应用程序中 我有一个在 a 中添加 删除 编辑记录的活动SortedMap 该活动作为以下活动的延伸实施ListActivity 我已经实现了自定义ArrayAdapter对于收藏品 Every ListView项目 对应于基础记录
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐

  • select2 插件不在 jquery 模式对话框内时工作正常

    我在 jquery 对话框中使用 select2 插件 但不起作用 当下拉时 焦点移动到输入控件 但立即离开它 不允许我输入任何内容 这是 HTML div title Asignar servicios a usuarios div
  • C# tableLayoutPanel 滚动除顶行之外的所有内容

    我正在使用 winforms 和 C 并查看 TableLayoutPanel 是否可以在大桌子上有滚动条 但不能让顶行滚动 这与 Excel 中 冻结窗格 选项的工作方式类似 我只想冻结顶行而不是其他任何东西 另外 我的桌子足够大 我还有
  • AWS lambda:pty 设备不足

    我尝试在 AWS lambda 中使用 pexpect 库 但收到以下错误 ERROR OSError out of pty devices 事实证明 任何包含 pty spawn 的代码都会在 lambda 中失败 下面是失败的 lamb
  • Android Paging 3 - 从 PagingData 对象获取数据列表

    我正在使用新的 jetpack Paging 3 库 我有一个特定的用例 我想使用视图模型在两个屏幕之间共享这些数据 一个屏幕需要分页数据 对于第二个屏幕 我想要此数据的简单列表 不是分页列表 我需要使用该列表 我不想在 PagingDat
  • R/Shiny 中的 Plain Dygraphs JavaScript 选项

    有没有办法在 R 中使用普通 Dygraphs JavaScript 选项 更具体地说是 Shiny http dygraphs com options html http dygraphs com options html 我觉得JS h
  • 更改actionBar下拉背景颜色

    如何更改显示 添加联系人 和 关于 的背景颜色 现在有点灰色 但我希望它是白色的 这是一个带有下拉菜单的操作栏 而不是旋转器 我不使用那个actionbarsherlock 的东西 例如 您现有的父母Style定义 仅添加android p
  • 如何在 MATLAB 中编写函数

    我想写一个返回值的函数f y 对于任何值y f y tan sin y sin tan y 如何在 MATLAB 中将其编写为函数 这是一个适合您目的的示例函数 function y f x y tan sin x sin tan x en
  • numpy.chararray 发生了什么

    Input chararr np chararray 3 5 chararr a chararr Output chararray b a b a b a b a b a b a b a b a b a b a b a b a b a b
  • 如何将字符串转换为 ifstream

    我正在尝试使用 ifstream 打开一个文件 并且想使用字符串作为路径 我的程序创建一个字符串路径 它会编译但保持空白 string path NameOfTheFile it would be something close to c
  • 谷歌地理编码 API 的计费问题

    计费已添加到我们的 gmaps api 项目中 而且该账单肯定会传播 因为它是在大约 4 周前添加的 在项目仪表板中 计费显示为可用 但是 当我们尝试调整配额时 它说我们需要激活计费 我们联系了 Google 的几乎所有渠道 并被告知完全没
  • CSS 多重文本装饰

    我想要拥有 h2 下划线同时闪烁 有没有办法只修改CSS样式来实现这一点 h2 例如 h2 text decoration underline blink or h2 text decoration underline text decor
  • 将 ereg_replace 替换为 preg_replace [重复]

    这个问题在这里已经有答案了 您好 需要更改功能ereg replace theData 到 preg replace To port ereg replace to preg replace你需要将正则表达式放在一对之间分隔符 你的正则表达
  • 特别分发:无法安装应用程序

    我正在开发一个ios应用程序 仅适用于iphone 并试图让其他人测试它 我通过临时分发在自己的设备上安装该应用程序没有问题 当我尝试在另一个人的设备上安装时 它总是失败 并显示消息 此时无法安装 xxxxx 我正在使用 xcode 5 以
  • Jython 不会将 PYTHONPATH 加载到 sys.path 中

    根据我读到的内容 sys path 应该由 PYTHONPATH 设置 在 Python 中 它是这样工作的 但在 Jython 中则不然 我可以绕过 Dpython path 但我想知道为什么 Jython 表现不佳 qa Scantro
  • 在 Visual Studio 2010 中使用正则表达式查找和替换来小写

    我正在使用 Visual Studio 2010 中的查找和替换功能来更改字段的编码样式 所有实例类似于 m MyField 应该 myField 但我只能设法得到 MyField using Find what m a zA Z Repl
  • 无法安装 sqlite3-ruby gem

    我已经安装了 xcode 3 0 我需要安装 sqlite3 ruby gem 用于 rhosync 当我跑步时 sudo gem install l sqlite3 ruby 我收到以下错误 Building native extensi
  • 重复的 typedef - 在 C 中无效但在 C++ 中有效?

    我想要一个标准参考 为什么以下代码会触发 C 中的合规性警告 使用gcc pedantic typedef 重新定义 但在 C 中没问题 g pedantic typedef struct Foo Foo typedef struct Fo
  • 如何判断文件是否为空?

    如何判断文件是否为空 该文件由运行在Windows平台上的C程序打开 我想以附加模式打开一个文件 如果为空 首先打印一个标题 Open CSV write header report csv fopen SNR csv a if repor
  • 在 Mac 上解压缩大型 ZIP 档案(例如最新的 Microsoft Edge VM)

    尝试在我的 Mac 上解压最新的 Microsoft Edge Vm zip 文件后 我最终得到一个 cpgz 文件 它应该为 virtualBox 生成一个 ova 文件 有人知道怎么修这个东西吗 http mattormeeple co
  • 何时使用 handler.post() 以及何时使用 new Thread()

    我想知道什么时候应该使用handler post runnable 我什么时候应该使用new Thread runnable start Handler 的开发人员文档中提到了这一点 导致 Runnable r 添加到消息队列中 可运行的