能否在非UI线程更新界面呢?
来源:互联网 发布:樊少皇为什么不红 知乎 编辑:程序博客网 时间:2024/05/27 00:58
简要总结爱哥文章:http://blog.csdn.net/aigestudio/article/details/43449123
结论:
可以,阻碍非UI线程更新UI的是ViewRootIml类的checkThread().所以在ViewRootIml未创建前是可以更新UI的。ViewRootIml是在addView中Create哦。
handleResumeActivity方法逻辑相对要复杂一些,除了一啪啦对当前显示Window的逻辑判断以及没创建的初始化等等工作外其在最终会调用Activity的makeVisible方法:
public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2 { // 省去海量代码………………………… void makeVisible() { if (!mWindowAdded) { ViewManager wm = getWindowManager(); wm.addView(mDecor, getWindow().getAttributes()); mWindowAdded = true; } mDecor.setVisibility(View.VISIBLE); } // 省去巨量代码…………………… }
在makeVisible方法中逻辑相当简单,获取一个窗口管理器对象并将我们曾在自定义控件其实很简单7/12中提到过的根视图DecorView添加到其中,addView的具体实现在WindowManagerGlobal中:
public final class WindowManagerGlobal { public void addView(View view, ViewGroup.LayoutParams params, Display display, Window parentWindow) { // 省去很多代码 ViewRootImpl root; // 省去一行代码 synchronized (mLock) { // 省去无关代码 root = new ViewRootImpl(view.getContext(), display); // 省去一行代码 // 省去一行代码 mRoots.add(root); // 省去一行代码 } // 省去部分代码 } }没错,可以执行!首先我们这里的是个线程,其次这里要涉及framework对UI事件处理的方式,我们在Android翻页效果原理实现之引入折线中曾说过Android对UI事件的处理需要依赖于Message Queue,当一个Msg被压入MQ到处理这个过程并非立即的,它需要一段事件,我们在线程中通过Thread.sleep(200)在等,在等什么呢?在等ViewRootImpl的实例对象被创建,有关于GUI中Message Queue的处理如有机会我会浓缩在《深入理解 Android GUI 框架》系列中,这里就暂且先不说了。
.
0 0
- 能否在非UI线程更新界面呢?
- Android能否在子线程中更新UI呢?
- 子线程能否更新UI
- 使用Thread+Handler实现非UI线程更新UI界面
- 非UI线程更新UI界面的各种方法小结
- 使用Thread+Handler实现非UI线程更新UI界面
- 非UI线程更新UI界面的各种方法小结
- 使用Thread+Handler实现非UI线程更新UI界面
- 使用Thread+Handler实现非UI线程更新UI界面
- 使用Thread+Handler实现非UI线程更新UI界面
- Android非UI线程中更新UI界面
- Android在子线程更新UI界面
- Android使用Thread+Handler实现非UI线程更新界面
- javaFX——非UI线程界面更新问题
- 非UI线程更新UI!?
- Android 在非UI线程直接更新UI信息
- Android在非UI线程中更新UI的方法
- Android开之在非UI线程中更新UI
- app中使用用户名/邮箱/手机号登录的思路分析
- SSMS – Performance Tuning using graphical execution plans - Missing indexes hints
- elasticsearch的5种分片查询优先级
- 淘宝JAVA中间件Diamond详解(1)-简介&快速使用
- 基于dubbo框架下的RPC通讯协议性能测试
- 能否在非UI线程更新界面呢?
- 项目部署到Tomat报异常:jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending ...
- Maven依赖的Scope去除部署不需要的jar 包(打包)
- SQL Server中SCAN 和SEEK的区别
- 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
- 解决android studio Gradle警告GBK编码的不可映射字符的问题
- 解决ScrollView下嵌套ListView进页面不在顶部的问题
- Java免费开源数据库、Java嵌入式数据库、Java内存数据库
- 关于jQuery选择器的完成介绍(转载)