Android中更新UI的几种方式
来源:互联网 发布:js 边框 编辑:程序博客网 时间:2024/05/22 10:47
Android中更新UI的几种方式:1. Activity 的 runOnUiThread()2. Handler 的 post()3. Handler 的 sendMessage()4. View 的 post()
代码实现:1.使用Handler的post():public void handlerChangeUI(){ handler.post(new Runnable(){ @Override public void run() { textView.setText("OK"); } });}2. 使用Handler的sendMessage():public void handlerChangeUI2(){ handler.sendEmptyMessage(1);}3. 使用Activity的runOnUiThread():public void activityUpdateUI(){ runOnUiThread(new Runnable() { @Override public void run() { textView.setText("Changed by Activity"); } });}4. 使用View的 post():public void viewUpdateUI(){ textView.post(new Runnable() { @Override public void run() { textView.setText("UI was updated by view.post"); } });}最后在 onCreate()内部创建一个线程,依次调用如上四种方法,观察结果。new Thread(){ @Override public void run() { try { Thread.sleep(1000); // handlerChangeUI(); // handlerChangeUI2() // activityUpdateUI() viewUpdateUI(); } catch (InterruptedException e) { e.printStackTrace(); } }}.start();
查看源码可发现,handler的post()内部调用了 sendMessageDelayed()方法,和我们普通发送Message是一样的,只不过它还要先调用getPostMessage()方法:public final boolean post(Runnable r){ return sendMessageDelayed(getPostMessage(r),0);}private static Message getPostMessage(Runnable r){ Message m = Message.obtain(); m.callback = r; ruturn m;}原来Callback就是一个Runnable对象。总之,handler使用post()去发送一个Runnable,其实它内部也是封装了Message去发送的,本质上和直接发送Message没有区别。那么Activity的runOnUiThread()又是如何更新UI的呢?public final void runOnUiThread(Runnable action){ if(Thread.currentThraed()!= mUiThread){ mHandler.post(action); // mHandler是Activity自己的Handler对象 }else{ action.run(); }}首先,判断当前线程是不是UI线程,不是的话,则调用Activity自己的Handler对象,通过该对象发送一个Runnable;如果是,则调用UI线程的run()方法。所以,Activity的runOnUiThread()内部也是使用了Handler机制去更新UI。
最后,看一下View的post()方法。public boolean post(Runnable action){ final AttachInfo attachInfo = mAttachInfo; if(attachInfo != null){ return attachInfo.mHandler.poat(action); } ViewRootImpl.getRunQueue().post(action); return true;}首先判断 attachInfo 是否为空。如果不为空,则通过 attachInfo 的Handler对象去post一个Runnable对象。如果为空,则调用ViewRootImpl的getRunQueue去拿到一个Handler去post一个Runnable对象。其中,ViewRootImpl 和更新UI的机制有着密切相关的联系。综上,更新UI的四种方法,本质上都是通过Handler机制去更新UI的。
阅读全文
0 0
- Android中更新UI的几种方式
- Android中更新UI的几种方式
- Android 中更新 UI 的几种方式
- android中更新UI的几种方式
- Android开发中更新UI的几种常用方式
- Android中更新UI的几种方式
- Android 更新UI的几种方式
- Android更新UI的几种方式
- Android 更新UI的几种方式
- Android 更新UI的几种方式
- Android: 在UI线程更新UI的几种方式
- 浅谈Android几种更新UI的方式
- Handler更新UI的几种方式
- Android中更新UI的几种方法
- Android提高(15)——第五章 解析Android中更新UI的几种方式
- android中更新UI的方式
- Android中常见更新UI的方式
- Android中更新UI的方式
- ScrollView下嵌套多个列表视图如(ListView、Gridview等)引发的一系列问题及解决办法
- LaTeX 各种命令,符号
- 使用Maven构建Spring Boot 第一课之Hello world 程序
- 不登陆数据库执行 MySQL 命令
- Java集合框架上机练习题
- Android中更新UI的几种方式
- jQuery第五章操作样式
- 薪资差一倍!Spark真的那么优于Hadoop吗?
- spring boot 2
- 华为EI上线新服务,让企业快速引入搜索服务
- 新数仓系列:Hbase周边生态梳理(1)
- 简单梳理跨数据中心数据库
- 大数据和云计算技术周报(第0期)
- leetCode-Task Scheduler