当前位置: 首页 > 知识库问答 >
问题:

何时使用处理器。post()

徐秋月
2023-03-14

我想知道什么时候应该使用处理程序。邮政(可运行) 以及何时使用新线程(runnable)。开始()

在开发者为Handler留档中提到:

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

这是否意味着如果我在活动类的onCreate()中编写:

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

那么runnable将在单独的线程中调用,还是在活动的线程中调用?


共有3个答案

宋晋
2023-03-14

举个例子:

mHandler = new Handler();
new Thread(new Runnable(){
  @Override
  public void run () {
    mHandler.post(new Runnable() {
     @Override
     public void run () {
       mUiView.setX(x);
     }
    });
  }
}).start();

或者,您可以跳过处理程序,直接在视图上使用post方法:

new Thread(new Runnable(){
  @Override
  public void run () {
    mUiView.post(new Runnable() {
     @Override
     public void run () {
       mUiView.setX(x);
     }
    });
  }
}).start();

这是一篇很好的帖子,概括了两者的区别:post方法到底做了什么?

丌官飞章
2023-03-14

要回答您的具体问题:

这是否意味着如果在onCreate of Activity类中我写:

Handler=new Handler()Handler。邮政(可运行);然后,runnable将在单独的线程中调用,还是在活动的线程上调用?

不会的。Runnable将在主线程本身上调用。Handler只用于将消息发布到它所连接的线程(创建消息的线程)。它不会自行创建线程。在您的示例中,您在主线程(调用Activity.OnCreate()的地方)中创建了一个处理程序,因此,发布在此类处理程序上的任何消息都将仅在主线程上运行。

劳华灿
2023-03-14

您应该使用处理程序。post()只要你想在UI线程上执行操作。

假设您想更改回调中文本视图的文本。因为回调没有在UI线程上运行,所以应该使用处理程序。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();

当然,如果您要执行的任务很长,同时用户有可能切换到另一个应用程序,那么您应该考虑使用服务。

 类似资料:
  • 0.7 新版功能. Flask 0.7 版引入了 URL 处理器的概念。此概念的意义在于,对于一部分资源, 您并不是很清楚该如何设定其 URL 相同的部分。例如可能有一些 URL 包含了几个字母 来指定的多国语言语种,但是你不想在每个函数里都手动识别到底是哪个语言。 搭配 Blueprint 使用时,URL 处理器尤其有用。这里我们将会就具体的应用例子介绍如何使用 URL 处理器和 Bluepri

  • 虽然程序员可以用异常作为程序控制的替代方法,但异常处理应当只用于异常情况,处理程序组件中与这些异常处理没有直接关系的异常,处理函数、库、类等常用软件组件中的异常和组件本身不处理异常的情况,在大型系统中以统一方式处理异常。 编程技巧 13.3 对程序本身很容易处理的简单局部错误使用传统情误处理方法而不用异常处理。 软件工程视点 13.3 涉及库时,库函数调用者通常用特定错误处理方法处理库函数中产生的

  • 其中是我的服务实现类。 在部署机器上,我将kubeconfig文件放在~/.kube/config上,并且命令行很好。 我不知道如何处理这个问题。知道我该如何找出异常的原因吗? 提前谢谢!

  • 本文阐述Apache处理器的使用。 什么是处理器(Handler) 相关模块 相关指令 mod_actions mod_asis mod_cgi mod_imagemap mod_info mod_mime mod_negotiation mod_status Action AddHandler RemoveHandler SetHandler "处理器"是当一个文件被调用时,Apache所执行操

  • 将 vue-loader 与 webpack 一起使用的好处之一是能够直接在你的 Vue 组件文件中预处理你的 HTML/CSS/JS,而无需其他工作。请查询 这里 相关的详细信息。 使用案例 假设我们需要使用 Sass/SCSS 来预处理我们的 CSS。首先,我们需要安装正确的 webpack 加载器来处理这种语法。 安装 sass-loader npm install --save-dev s

  • 问题内容: 是否可以为Alamofire请求添加超时处理程序? 在我的项目中,我以这种方式使用Alamofire: 编辑: 请求失败消息 错误域= NSURLErrorDomain代码= -1001“请求超时。” UserInfo = {NSUnderlyingError = 0x7fc10b937320 {Error Domain = kCFErrorDomainCFNetwork Code =