本文目录一览:
【Android】Window/DecorView/ViewRootImpl
ViewRootImpl是在WindowManagerGlobal的 addView 方法中被初始化的,并且也是在这里与DecorView进行绑定,成为DecorView的parent。调用链可以追溯到 ActivityThread.handleResumeActivity 中,在 performResumeActivity 调用之后,ViewRootImpl被创建。也就是说,ViewRootImpl是在 onResume 回调之后才进行初始化的。
ViewRoot 对应于 ViewRootImpl 类,它是连接 WindowManager 和 DecorView 的纽带,View的三大流程均是通过 ViewRoot 来完成的。在 ActivityThread 中,当 Activity 对象被创建完毕后,会将 DecorView 添加到 Window 中,同时会创建 ViewRootImpl 对象,并将 ViewRootImpl 对象和 DecorView 建立关联。
在Activity中调用setContentView()方法开始加载顶级View,即DecorView,这个过程通过PhoneWindow中的installDecor()方法实现。在DecorView初始化后,开始执行View的工作流程。当Activity进入Resume状态时,ViewRootImpl实例开始工作,执行measure、layout和draw方法,完成View的绘制。
requestLayout
mHandlingLayoutInLayoutRequest一般为false。 只有在performLayout方法, 存在validLayoutRequesters列表,处理View列表时,才会设置为true ,并将一定数量numValidRequests的View调用requestLayout方法。从addView方法触发的requestLayout,mInLayout是false。View# isLayoutRequested方法。
requestLayout: 当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view重新调用他的onMeasure onLayout来对重新设置自己位置。特别的当view的layoutparameter发生改变,并且它的值还没能应用到view上,这时候适合调用这个方法。
顾名思义,重新请求布局。 来看看View.requestLayout()方法:可以看出,这个递归调用和invalidate一样的套路,向上寻找其父布局,一直到ViewRootImpl为止,给每个布局设置PFLAG_FORCE_LAYOUT和PFLAG_INVALIDATED标记。
requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view重新调用他的onMeasure onLayout来对重新设置自己位置。特别的当view的layoutparameter发生改变,并且它的值还没能应用到view上,这时候适合调用这个方法。
一般来说,只要刷新的时候就调用invalidate,需要重新measure就调用requestLayout,后面再跟个invalidate(为了保证重绘),这是我个人的理解。
tomcat服务器加载报异常如何解决
首先,配置错误是导致tomcat服务异常的常见原因之一。Tomcat服务器的配置文件包括server.xml、web.xml等,这些文件中包含了服务器的各种设置。如果配置不当,比如端口冲突、内存设置不合理等,就可能导致服务启动失败或运行时异常。因此,在排查问题时,首先要检查这些配置文件是否正确无误。
首先,在电脑桌面的低端点击右键出现的选项中找到任务管理器,点击进入,进入管理器后,我们会看见自己电脑中所有正在运行的程序进程,在所有的进程中找到我们需要的javaw.exe进程,左键点击选中,再看到打开的对话框右下角,结束进程,点击,会有提示问是否确定结束进程,点击确认就好。
解决方案:重新配置Java环境变量,确保使用正确的Java版本。具体步骤如下:- 使用命令`which java`确认当前使用的Java路径。- 列出该路径下的文件,观察其实际指向。- 确保指向正确的Java安装目录下的`bin/java`文件,通过编辑`/etc/profile`文件更新环境变量设置,并重新加载配置。
网友留言(0)