• 2024-08-08「Android面试」Android 子线程为什么直接更新UI?
    本文将从子线程不能更新UI的直接原因、根本原因、Android如何做到限制以及子线程该如何正确更新UI四个方向回答问题。【直接原因】在子线程中更新UI会怎样?程序会出现以下错误:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews. 【根本原因
  • 2024-07-11遥控器Tab键切换时按键音流程
    用遥控器进行界面的tab切换时,会有音量出现,梳理下tab切换时按键音的逻辑。基于AndroidU的代码。从ViewRootImpl的processKeyEvent方法开始,这个方法用于处理按键事件。首先看下该方法的调用堆栈。atandroid.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRo
  • 2024-07-07Android面试题自定义View之Window、ViewRootImpl和View的三大流程
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点View的三大流程指的是measure(测量)、layout(布局)、draw(绘制)。下面我们来分别看看这三大流程View的measure(测量)MeasureSpecMeasureSpec是View的一个内部静
  • 2023-06-22AndroidUI进阶-为什么不能在子线程更新UI
    为什么不能在子线程更新UIandroid.view.ViewRootImpl$CalledFromWrongThreadException:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.atandroid.view.ViewRootImpl.checkThread(ViewRootImpl.java:8798)atandroid.view.ViewR
  • 2023-06-12Android 12 addWindow过程分析
    1背景分析过Window层级结构之后,以addWindow为切入点看一下系统是怎么使用的。而且addWindow也是系统非常重要的一个环节,无论是Activity(PhoneWindow)还是各种系统窗口,都会走到这里。addView举例:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/Sta
  • 2023-06-02Android 12 Window ViewRootImpl Activity的关系
    1Window和ViewRootImpl有什么关系?看右侧流程图,上层的UI大体分成两大类,一是Activity,另一类是CustomWindow(如状态栏、toast等)。但是他们都要经过WindowManager.addView这个接口添加到系统中。经过WindowManagerGlobal,会new一个ViewRootImpl,ViewRootImpl会申请server端的Sessio