Android Handler.post,到底发生了什么

2024-03-12

几天以来,我试图弄清楚如果我执行代码到底会发生什么

void function(){

  //somePreExecutionCode
  new Handler().post(new Runnable(){
    @Override 
    public void run(){
       //someCode
    }
  });
}

看起来它并没有阻塞 UI,因此调用 function() 的按钮不会卡在单击的位置,直到 someCode 完成。 但是,如果 somePreExecutionCode 启动进度条,则当 someCode 完成时,进度条会在同一时刻显示。 我知道,有 AsyncTasks,但是还有其他可能性吗?

和有什么区别

new Handler().post 

and

View.post

?


当创建一个Android应用程序时,系统会创建一个执行的主线程。该线程称为 UI 线程,所有与 UI 相关的操作都发生在该线程上,以避免同步问题。

A Looper http://developer.android.com/reference/android/os/Looper.html实例是在此线程上创建的,该线程有一个消息队列 http://developer.android.com/reference/android/os/MessageQueue.html数据结构。 Looper会处于无限循环等待读取Message http://developer.android.com/reference/android/os/Message.html / Runnable http://developer.android.com/reference/java/lang/Runnable.html实例发布于消息队列 http://developer.android.com/reference/android/os/MessageQueue.html。添加消息7 /Runnable http://developer.android.com/reference/java/lang/Runnable.html到消息队列,Handler http://developer.android.com/reference/android/os/Handler.html用来。

当您创建 Handler 实例时,它将与当前执行线程以及在该特定线程上创建的 Looper 实例相关联。

因此,当您通过 Handler 发布消息时,该消息将被添加到 MessageQueue 中,Looper 将按 FIFO 顺序读取消息并将其传递到目标。

new Handler().post() 和 View.post 有点不同。

  • 当您通过 View.post 发布消息时,可以保证消息将发布到 UI 线程消息队列上,因为它内部使用在 UI 线程上创建的 Handler 实例。
  • 如果您在 UI 线程上创建 Handler 实例并在任何线程上使用它发布消息,则消息将被发布到 UI 线程的 MessageQueue 中。
  • 如果您在非 UI 线程上创建 Handler 实例并使用它发布消息,它们将被发布到非 UI 线程的 MessageQueue 上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Handler.post,到底发生了什么 的相关文章

  • 如何为ScrollView放置固定图像背景?

    我应该想要滚动视图滚动 而不是背景中的图像 将图像添加到滚动视图框架之前的视图层次结构的较高位置
  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • SearchView过滤ListView

    我已经实现了搜索视图来过滤我的列表视图项目 当我输入任何文本时 它会过滤列表 但当我退出搜索视图时 它不会返回原始列表项 public class PlacesListAdapter extends ArrayAdapter
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • java.lang.NoClassDefFoundError:org.apache.batik.dom.svg.SVGDOMImplementation

    我在链接到我的 Android LibGDX 项目的 Apache Batik 库时遇到了奇怪的问题 但让我们从头开始 在 IntelliJ Idea 中我有一个项目 其中包含三个模块 Main Android 和 Desktop 我强调的
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • django-admin 中的模型描述

    django admin中是否可以在某个模型的列表显示页面上放置模型描述或描述 我说的是当你点击 django admin 主页上的模型名称链接并进入该模型的列表显示页面时 表格顶部将写有说明 就像是 该模型用于记录将通过我们的抓取获取的所
  • SVG 容器在 Safari 桌面中呈现错误的大小(在 Chrome/iOS 中正常)

    我以为 Safari 已经解决了这个问题 但它似乎仍然是一个问题 除非我做了一些明显错误的事情 我在对象标签内放置了一个 SVG 它被包裹在一个灵活的包含 DIV 中 例如设置为宽度 50 在调整大小时 容器高度在 Firefox Chro
  • JPMS支持模块版本吗?

    我以为JPMS不支持模块版本 然而 当我这样做时java list modules我有以下输出 java activation 9 java base 9 java compiler 9 java corba 9 java datatran
  • 使用 jenkins 执行 wsl.exe 返回 exit -1073740791

    我在一台具有 WSL 适用于 Linux 的 Windows 子系统 的 Windows 10 计算机上设置了 jenkins 例如 当我从终端运行简单命令 C Windows System32 wsl exe help 时 它工作正常 使
  • 删除 Shapely 多边形外部的 numpy 网格点

    我有一个 10 x 10 网格 我想删除形状多边形之外的点 import numpy as np from shapely geometry import Polygon Point from descartes import Polygo
  • 如何为 powershell 函数的描述属性添加值?

    我想填充我在 PROFILE 中创建的 Powershell 函数的 Description 属性 我想向 描述 属性添加一个值 例如 在个人配置文件中创建 这可能吗 目前 如果我检查我的功能描述 我发现没有填充任何内容 例如 Get Co
  • 应该匹配 RSpec 期望语法

    正确的使用格式是什么应该匹配器 https github com thoughtbot shoulda matchers和 RSpec 的新期望语法 http myronmars to n dev blog 2012 06 rspecs n
  • 使用 Firebase android 时如何向用户添加用户名?

    我目前开始在我的 Android 应用程序中使用 Firebase 并使用其 GitHub 上的示例来创建登录和注册活动 https github com firebase quickstart android https github c
  • 在 onDragStop 事件中获取 Material UI Slider 值

    我想触发一个事件onDragStop而不是onChange使用材质 UISlider在我的 React 应用程序中 以便事件触发次数更少 但是 那文档 https mui com material ui react slider表明onDr
  • 尝试使用 ItemsControl.AlternationIndex 显示列表中的行索引

    我有以下 XAML 旨在将行号放在左列中 但所有输出都是0
  • 根据父 ID 值将数组从一维转换为多维

    我有一个代表多维数据的一维对象数组 array array id gt 45 parent id gt null array id gt 200 parent id gt 45 array id gt 345 parent id gt 45
  • 密码强度检查库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以推荐一个 Java 库 其中包含适合在 Web 应用程序中执行服务器端密码强度检查的方法 理想情况下 检查器应该是 可配置 允
  • 如何在Python中子类化str

    我正在尝试对 str 对象进行子类化 并向其添加几个方法 我的主要目的是学习如何去做 我陷入困境的是 我是否应该在元类中对 string 进行子类化 并使用该元创建我的类 或者直接对 str 进行子类化 而且 我想我需要实施 new 不知何
  • 使用 NHibernate 和动态匿名对象在 GroupBy 查询中进行选择

    我的主要目标是创建一个动态组并在 NHibernate 中使用它 考虑这个非动态的例子works repository Collection
  • 使 React 组件作为 Widget 可用

    我有一个复杂的 React 应用程序 包括渲染某些组件的身份验证等 并且有一个特定的组件 一个日期选择器 我希望其他用户将其作为 Google 地图的小部件嵌入到他们的网站上 我已经成功地将其作为 iFrame 进行共享 但我想了解如何将其
  • 使用贪婪正则表达式忽略可选后缀

    我正在 NET 中对如下所示的字符串执行正则表达式匹配 1 Lists General Discussion Waffles Win 2 Lists General Discussion Waffles Win 2 000 3 Lists
  • 使用 php 脚本中的 rsync 同步本地和远程文件夹,无需输入密码

    如何在 php 脚本中使用 rsync 同步本地和远程文件夹而不提示输入密码 我已经设置了一个公钥来自动为我的用户登录远程服务器 所以从 cli 上运行没有任何问题 rsync r a v e ssh l user delete local
  • 获取解析后的PHP文件

    我试图在解析 PHP 文件后获取其内容 然后将其存储在变量中 除了这个例子之外 我无法通过谷歌获得任何有用的信息 ob start include file content ob get clean 但这会以纯文本形式返回内容 即 标签仍然
  • 点击“后退”按钮时将数据保存在编辑文本中

    因此 在活动 1 中 我单击一个按钮进入活动 2 在活动 2 中 我将一些数据输入到 EditText 中 当我点击手机上的后退按钮时 它会将我带到活动 1 这是正确的 但如果我再次点击活动 1 按钮 我在 EditText 中输入的任何文
  • Android Handler.post,到底发生了什么

    几天以来 我试图弄清楚如果我执行代码到底会发生什么 void function somePreExecutionCode new Handler post new Runnable Override public void run some