安卓handler机制和runOnUiThread()方法执行流程及两者的区别

原创 2018年04月16日 09:50:09

在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.


非主UI线程更新视图的两种方法:一种是Handler一种是Activity中的 runOnUiThread(Runnable )方法。对于第一中方法,是采用传递消息的方式,调用Handler中方法来处理消息更新视图。这种方式对于不是很频繁的调用是可取的。如果更新的较快,则消息处理会一直排队处理,这样显示会相对滞后。这个时候就可以考虑使用第二中方式,将需要执行的代码放到Runnable的run方法中,然后调用runOnUiThread()这个方法将Runnable的对象传入即可。


handler控制界面UI的流程:

事件响应→开启线程→new Message();→new Bundle();→bundle.putString("event", "Handler更改UI");→msg.setData(bundle);→handler.sendMessage(msg);→new handler(msg.getdata→getString→更改UI)

RunOnUi的流程:(爬源码所得如下)

事件响应→开启线程→runOnUiThread→判断是否当前线程为主UI线程(是就立刻执行,不是就通过handler.post()发送到动作序列中,等到是主UI线程再立刻执行)

安卓handler机制和RunOnUi方法都能修改主线程,两者的区别

今天一个哥们说他去公司面试,碰到这个问题:安卓handler机制和RunOnUi方法都能修改主线程,两者的区别。 拿给我看,也是不甚了解,所以这里我们先看下app的运行机制: 从图中我们可...
  • qq_22603017
  • qq_22603017
  • 2015-07-12 03:07:05
  • 2379

android runOnUiThread与handler message的区别

两者主要的区别,runOnUiThread跟新主线程存在加锁,即跟新的时候其他跟新操作会暂停。所以建议还是使用handler +message来处理跟新操作! 1.启动runOnUiThread来跟...
  • lyp13243189027
  • lyp13243189027
  • 2016-10-17 17:26:58
  • 333

android 更新界面视图 Handler和runOnUiThread

原文: 在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。抛出异常:android....
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2014-07-08 22:55:58
  • 6532

runOnUiThread handler区别

this.runOnUiThread(new Runnable() {           @Override           public void run() {            ...
  • fei0724
  • fei0724
  • 2014-06-09 15:16:28
  • 1929

Android中更新UI的两种方法——handler和runOnUiThread()

在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错。 抛出异常: android.view....
  • u014482758
  • u014482758
  • 2014-12-23 21:21:02
  • 558

Android开发中更新UI时runOnUIthread(Runnable)与Handler.post(Runnable)的区别及如何选择

我们都知道,android中的View不是线程安全的,只有主线程/UI线程(主线程和UI是等同的)才能更新UI,否则会报错。runOnUiThread(Runnale)和Handler.post(Ru...
  • Great_l001
  • Great_l001
  • 2016-06-25 10:23:40
  • 666

Android从源码分析handler.post(runnable),view.post(runnable),runOnUiThread(runnable)执行时机

大家好,我是听者,耳听心受的听,孙行者的者,感谢大家阅读我的文章。今天和大家分享关于handler().post(),view.post(),runOnUiThread()三种回到主线程方式的联系与区...
  • fengshenlangzi
  • fengshenlangzi
  • 2016-06-21 19:15:18
  • 635

view.post,handler.runonUiThread详解

runOnUiThread简单应用 2012-05-31 17:09 18194人阅读 评论(1) 收藏 举报 threadactionui通讯 首先runOnUiThread...
  • u012995136
  • u012995136
  • 2015-11-07 12:36:33
  • 1347

Android中的Handler的机制与用法详解

目录结构 Android中的Handler的机制与用法详解,什么是Handler,如何传递 Message,传递 Runnable 对象,传递 Callback 对象,Handler 原理是什么...
  • wangning13ji
  • wangning13ji
  • 2016-08-23 11:43:52
  • 2147

runOnUIThread、Handler、AsyncTask与子线程结合使用更新UI

import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import androi...
  • liu537192
  • liu537192
  • 2014-11-30 13:59:09
  • 634
收藏助手
不良信息举报
您举报文章:安卓handler机制和runOnUiThread()方法执行流程及两者的区别
举报原因:
原因补充:

(最多只允许输入30个字)