thread/runnable、handler、runonuithread、asynctask 之间的区别

2024-07-04

我开始学习android编程并正在开发一个小游戏。我听说做后台操作或更新或下载或任何后台和耗时的事情不应该使用 ui 线程来完成,而是使用线程/可运行或异步任务。但我无法在线程中执行一些操作,例如与数据库的后台连接,因为此连接与剩余的处理程序、runonuithread、asynctask 一起使用。我非常困惑在哪里使用哪个。 我有一些疑问 1.handler、runonuithread 都在 ui 线程上运行,thread/runnable 是不同的线程,在异步任务中,doinbackground 方法在不同线程上运行,其他方法(如 onprogressupdate、onpreexecute 和 onpostexecute)在 ui 线程上运行。正确的? 如果是这样,我编写了一个程序来与线程/可运行数据库进行连接,但它不起作用,但是当我在 doinbackground 中编写它时,它起作用了。我的困惑是,由于这两种方法都在不同的线程上运行,为什么会发生这种情况。 2.这4者的主要区别是什么?它们适用和不适用的地方。 并且还想知道只有 ui 线程可以执行哪些任务。 感谢在副词:)


A Handler允许您发布要在主 UI 线程上执行的消息。Activity#runOnUiThread(Runnable)是一种方便的方法,使用Handler内部发布一个Runnable在 UI 线程上(参见源代码 https://github.com/android/platform_frameworks_base/blob/lollipop-release/core/java/android/app/Activity.java#L5243-L5249). Handlers 通常用于将后台线程上生成的事件与主 UI 线程同步。例如,自从Views 和其他 UI 小部件不能直接在后台线程上修改,后台线程可能会发布一条消息,在主 UI 线程上而不是在后台进行这些修改。

An AsyncTask是一个实用程序类,它使用线程池来执行任务并提供有用的回调方法(即onPreExecute, onPostExecute等)保证在主 UI 线程上执行(换句话说,它抽象了Handler来自开发商)。

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

thread/runnable、handler、runonuithread、asynctask 之间的区别 的相关文章

  • Pthread Mutex:pthread_mutex_unlock() 消耗大量时间

    我用pthread编写了一个多线程程序 使用生产者 消费者模型 当我使用 Intel VTune profiler 来分析我的程序时 我发现生产者和消费者在 pthread mutex unlock 上花费了大量时间 我不明白为什么会这样
  • SwipeListView 使用 NullPointerException

    我正在尝试使用SwipeListView 但是当我触摸应用程序上的某个项目时 它会崩溃 日志信息就在那里 05 26 21 52 26 545 E AndroidRuntime 19862 java lang NullPointerExce
  • 测试最终字段的初始化安全性

    我试图简单地测试 JLS 保证的最终字段的初始化安全性 这是为了我正在写的一篇论文 但是 根据我当前的代码 我无法让它 失败 有人可以告诉我我做错了什么 或者这只是我必须一遍又一遍地运行然后在一些不幸的时机看到失败的事情吗 这是我的代码 p
  • 使用带有离子和电容器的 https 加载 webview

    我正在尝试构建一个必须加载的 apkhttps mydomain https mydomain与离子4和电容器 在 Capacitor config json 中 我精确了这个字段 server hostname mydomain 因为我在
  • 如何使用 Android Volley 显示/请求 JSON 对象?

    我在 Android Studio 中遇到如何请求 JSON 对象的问题 我的 Logcat 只能打印 String onResponse 而不能打印 JSONObject 值 我在 AccessActivity java 内的 try 行
  • 新项目应该使用哪个 Android Camera API?

    我正在开发一个新的应用程序 我想一直支持果冻豆 冰淇淋三明治 我需要在我的应用程序中使用摄像机 只是拍摄一些 15 秒的镜头 无需处理 我是否必须编写两个相机活动 一个使用相机 api 另一个使用camera2 api 并以某种方式根据设备
  • 仅第一行断点有效

    I am developing in Android Studio i ve used IntelliJ IDEA SDK I ve encountered debugging problem All my breakpoints don
  • HTC Desire 上的 EGLConfig,可用配置挂起设备

    我正在实施我自己的EGLConfigChooser传递给setEGLConfigChooser 为了根据我对应用程序的需求为当前设备选择最佳的可用配置 更具体地说 我正在查询所有可用的配置并选择具有最大深度缓冲区大小的配置 在具有相同深度缓
  • 隐藏另一个布局的浮动操作按钮

    我有一个FloatingActionButton五月之内activity main xml名为的布局fabBtn 我的应用程序是用ViewPager和三个Fragments 我想隐藏FloatingActionButton当我的第一次Fra
  • Android:可以在同一任务中启动一个活动的多个实例吗?

    我尝试使用此代码从父活动启动多个活动 for int i 0 i
  • 如何用多个手指在画布上绘图

    我正在使用安卓Canvas创建绘图应用程序的类 这是我第一次尝试使用 Canvas 类 到目前为止 我使用的代码工作正常 绘图工作正常 但我在这段代码中意识到 它允许用户仅用一根手指进行绘画 我的意思是说 如果用户使用多于一根手指在画布上绘
  • Google 登录使用新的 GoogleSignInOptions 获取访问令牌

    我的 Android 应用程序当前使用 GoogleAuthUtil 来登录用户并获取access token它被传递到后端 下面的代码片段显示创建 GoogleApiClient 并使用 GoogleAuthUtil 获取令牌 mGoog
  • SQlite - Android - 外键语法

    我一直在尝试让外键在我的 Android SQLite 数据库中工作 我尝试过以下语法 但它给了我强制关闭 private static final String TASK TABLE CREATE create table TASK TA
  • 以编程方式将项目添加到相对布局

    我一直在到处寻找这个问题的答案 我是 Android 新手 尝试通过 java 而不是 xml 以编程方式将项目添加到相对布局 我创建了一个测试类来尝试一下 但项目不断堆叠而不是正确格式化 我现在只想将一个 TextView 放在另一个下面
  • 使用 v8::Locker 的正确方法是什么?为什么必须使用它?

    我正在尝试使用 NDK 将 v8 嵌入到 Android 应用程序中 我有一个看起来像这样的 JNI 模块 未显示 JNI 映射代码 include
  • 具有 EditText 材质设计的工具栏

    我正在尝试制作带有 EditText 的工具栏 如下所示 现在我可以做一些类似的事情 但只能使用静态标题 有什么想法可以开始吗 我已经这样做了 如下所示 有Toolbar as AppBar aka ActionBar 位于顶部 其下方的第
  • Django 会话竞争条件?

    摘要 Django 会话中是否存在竞争条件 如何防止它 我在 Django 会话方面遇到了一个有趣的问题 我认为该问题涉及由于同一用户同时发出请求而导致的竞争条件 它发生在一个同时上传多个文件的脚本中 正在本地主机上进行测试 我认为这使得同
  • 从 android 发送数组并使用 Volley 在 PhP 服务器接收

    你好我想发送一个字符串值数组到 PhP 服务器和 PhP 解码并将它们存储在 PhP 变量中 这是我在 android studio 的代码 private void getEventDetailRespond RequestQueue r
  • 创建自定义 Google Now 卡片

    Google 为 Google Now 提供了各种 卡片 http www google com landing now http www google com landing now 可以创建自己的卡片吗 该系统看起来非常模块化 但我还没
  • 在模拟器中实施应用内结算

    我一直在阅读有关 Android 应用程序的 实施应用内计费 的内容 并且文档说不可能在模拟器中测试该应用程序 真的吗 我正在开发的手机没有 移动数据计划 因此我尝试通过 USB 通过 PC 连接手机 但由于我的 PC 位于代理后面 因此我

随机推荐

  • Decimal 存储 C# 中解析字符串的精度?有什么影响?

    在 IRC 的一次对话中 有人指出了以下几点 decimal Parse 1 0000 ToString 1 0000 decimal Parse 1 00 ToString 1 00 如何 为什么decimal类型像这样保留精度 或者更确
  • 复合主键:好还是坏?

    虽然可以使用复合主键 但是对于下面的情况 这真的是一种不好的做法吗 Stackoverflow 上的共识在这个问题上似乎是双向的 Why 我想将订单付款存储在单独的表中 原因是 一个订单可以有许多项目 这些项目以多对多关系的形式在单独的表中
  • 在 C 中打印 Unicode 符号

    我正在尝试打印 unicode 星号字符 0x2605 http www fileformat info info unicode char 2605 index htm 在使用 C 的 Linux 终端中 我遵循了网站上其他答案建议的语法
  • 如何获取谷歌地图 v2 api 密钥以进行团队合作

    抱歉我的英语不好 我的 google 地图 api v2 密钥有问题 我和我的团队一起工作 我们的项目 android 项目 只需要一个 api 密钥 有可能吗 或者我团队的所有成员都必须生成 api 密钥才能运行 google 地图 您可
  • 无法在 python 中获取当前 url

    我创建了一个类和方法 如下所示 我需要获取当前页面的网址 但在调用 get full path 时出现错误 class A object def get user request current url request get full p
  • python statsmodels:帮助使用 ARIMA 模型进行时间序列

    statsmodels 的 ARIMA 为我的输出提供了不准确的答案 我想知道是否有人可以帮助我理解我的代码有什么问题 这是一个示例 import pandas as pd import numpy as np import datetim
  • 在 git Push 上硬重置

    我有一个接收后挂钩脚本位于我正在推送的远程存储库上 该脚本执行以下操作git reset hard 像这样的东西 git push opal Counting objects 74 done Delta compression using
  • Haskell 约束不小于实例头

    有些戒指可以配备标准功能 class Ring C a gt EuclideanDomain a where norm a gt Integer 使用此功能 可以通过明显的方式订购戒指 compare x y compare norm x
  • 从 Equals 方法返回 false 而不覆盖

    Write TestEquals class所以主要方法Puzzle3班级版画false 注意 您不能覆盖 TestEquals 类的 equals 方法 public class Puzzle3 public static void ma
  • Haskell:如何评估“1+2”等字符串

    实际上我有一些公式 x y 这是一个String 我设法更换了x y具有特定值的变量 例如 1 2 这仍然是String类型 现在我的表情就像 1 2 所以问题是如何计算字符串类型的表达式并得到结果 PS 我想要某样东西read 可以直接转
  • Android 生物识别回调不适用于 PIN-CODE

    我正在尝试使用指纹和 Pincode 来实现生物识别 指纹工作正常 但是当我尝试使用 pin 码时 会出现带有 pin 码的屏幕 但如果我调用 pin 码检查 则不会调用回调没有指纹 只调用 onAuthenticationSucceede
  • 在SSIS中使用脚本任务导入Json文件

    我是在 SSIS 中使用脚本任务导入 API 的新手 我必须管理一个简单的 API JSON 文件的导入 但这第二个 API JSON 文件有点棘手 我一直在看代码 只是不知道我做错了什么 我的 JSON 文件有一个标头 我需要确定需要循环
  • Firebase 分析在 DebugView 中显示不正确的数据

    我正在使用 Firebase 分析 我注册了两个用户属性 并且有两个自定义事件 每个事件包含 3 到 50 个不同的选项 我遇到的问题是 当我设置用户属性时 DebugView 通常会显示事件的旧用户属性或根本不显示 有时它可以正常工作 请
  • urllib.error.HTTPError:HTTP 错误 502:错误网关 PYTHON

    我尝试使用 urllib request urlopen url read 打开 Instagram URL 但收到错误urllib error HTTPError HTTP 错误 502 错误网关 username input enter
  • Angular 5 - 如何重定向到具有特定标头的外部 URL?

    这就是我试图用 Angular 实现的目标 this headers this http get urlApi subscribe data gt go to url with specific headers err gt console
  • Angular 2 模态弹出错误“表达式在检查后已更改”

    演示应用程序的 Github 存储库 https github com eddy80310 formBug 我有一个非常简单的应用程序 其中包含应用程序组件 子组件 帐户 处理消息对话框组件 弹出模式 的警报服务 为了演示目的 我有两种相同
  • React JS 拒绝加载图像,因为它违反了以下内容安全策略指令

    当我尝试重新加载反应应用程序网页时 我遇到了这个问题 注意 在开发阶段 此类事情没有问题 但是当我将其部署到生产时 我遇到了这个问题 谢谢 Refused to load the image http 104 248 153 121 808
  • PHP 字符串中的 JavaScript 数组

    我正在开发一个具有数千个值的应用程序 我正在尝试用 JavaScript 创建一个动态数组 我正在使用 AJAX 来获取我的值 所以我必须从 PHP 创建一个字符串 它应该能够在 JavaScript 中从字符串转换为数组 如何在 PHP
  • 删除不可变借用以进行可变借用

    我仍在学习 Rust 当尝试将 Dijkstra 作为培训项目的一部分实现时 我遇到了这个奇怪的问题 首先我定义一个HashMap let mut dist HashMap
  • thread/runnable、handler、runonuithread、asynctask 之间的区别

    我开始学习android编程并正在开发一个小游戏 我听说做后台操作或更新或下载或任何后台和耗时的事情不应该使用 ui 线程来完成 而是使用线程 可运行或异步任务 但我无法在线程中执行一些操作 例如与数据库的后台连接 因为此连接与剩余的处理程