手机网站打开微信号六盘水市网站建设
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:44
当前位置: 首页 > news >正文
手机网站打开微信号,六盘水市网站建设,电子商务有什么职业,wordpress如何免费导入音频Android窗口是根据显示屏幕来管理#xff0c;每个显示屏幕的窗口层级分为37层#xff0c;0-36层。每层可以放置多个窗口#xff0c;上层窗口覆盖下面的。 要理解窗口的结构#xff0c;需要学习下WindowContainer、RootWindowContainer、DisplayContent、TaskDisplayArea、T…Android窗口是根据显示屏幕来管理每个显示屏幕的窗口层级分为37层0-36层。每层可以放置多个窗口上层窗口覆盖下面的。 要理解窗口的结构需要学习下WindowContainer、RootWindowContainer、DisplayContent、TaskDisplayArea、Task、ActivityRecord、WindowToken、WindowState
WindowContainer等类。 WindowContainer类 为直接包含窗口或者通过孩子层级形式包含窗口的类定义了普遍功能。它作为基类被继承像RootWindowContainer、DisplayContent、TaskDisplayArea、Task、ActivityRecord、WindowToken、WindowState都是直接或间接的继承该类。 class WindowContainerE extends WindowContainer extends ConfigurationContainerEimplements ComparableWindowContainer, Animatable, SurfaceFreezer.Freezable {……// List of children for this window container. List is in z-order as the children appear on// screen with the top-most window container at the tail of the list.protected final WindowListE mChildren new WindowListE(); ……} 窗口结构层级相关类 先上一张没添加特色模式窗口结构图 该图是未添加特色模式时的结构图添加特色模式之后的结构更复杂。 RootWindowContainer根窗口容器树的根是它。通过它遍历寻找可以找到窗口树上的窗口。它的孩子是DisplayContent。 DisplayContent该类是对应着显示屏幕的Android是支持多屏幕的所以可能存在多个DisplayContent对象。上图只画了一个对象的结构其他对象的结构也是和画的对象的结构是相似的。 TaskDisplayArea它为DisplayContent的孩子对应着窗口层次的第2层。第2层作为应用层看它的定义int APPLICATION_LAYER 2应用层的窗口是处于第2层。TaskDisplayArea的孩子是Task类其实它的孩子类型也可以是TaskDisplayArea。而Task的孩子则可以是ActivityRecord也可以是Task。 Tokens它为DisplayContent的孩子它的孩子是WindowToken。而WindowToken的孩子则为WindowState对象。WindowState是对应着一个窗口的。结构图中DisplayContent不止包含一个Tokens还有两个。其实ImeContainer也是继承自Tokens。 ImeContainer它也为DisplayContent的孩子它是输入法窗口的容器它的孩子是WindowToken类型。WindowToken的孩子为WindowState类型而WindowState类型则对应着输入法窗口。 Task任务它的孩子可以是Task也可以是ActivityRecord类型。 ActivityRecord是对应着应用进程中的Activity的。ActivityRecord是继承WindowToken的它的孩子类型为WindowState。 WindowStateWindowState是对应着一个窗口的。 结构图中DisplayContent有5个孩子。图中从上到下第一个是Tokens对应着窗口图层0、1。第二个是TaskDisplayArea对应着窗口图层2。第三个是Tokens对应着窗口图层3到14。第四个是ImeContainer对应着窗口图层15到16。第五个是Tokens对应着窗口图层17到36。 Activity添加窗口过程
frameworks/base/core/java/android/app/ActivityOptions.java
ActivityOptions(Bundle opts) {private static final String KEY_AVOID_MOVE_TO_FRONT android.activity.avoidMoveToFront;mAvoidMoveToFront opts.getBoolean(KEY_AVOID_MOVE_TO_FRONT, false);frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
startActivityInnerSlog.w(TAG, xww startActivityInner, targetTask targetTask r r sourceRecord sourceRecord); //xww startActivityInner, targetTasknull rActivityRecord{44c341e u0 com.xxx.launcher/.MainActivity t2} sourceRecordnullif (!mAvoidMoveToFront mDoResume) { mTargetRootTask.getRootTask().moveToFront(reuseOrNewTask, targetTask); }
frameworks/base/services/core/java/com/android/server/wm/Task.javamoveToFrontSlog.w(TAG, xww moveToFront 3, task task reason reason); //xww moveToFront 3, tasknull reasonreuseOrNewTaskmoveToFrontInner(reason, task);
frameworks/base/services/core/java/com/android/server/wm/TaskDisplayArea.javatask.getParent().positionChildAt(POSITION_TOP, task, true /* includingParents /);Slog.w(TAG, xww positionChildAt 3aa, child.asTask() child.asTask());//xww positionChildAt 3aa, child.asTask()Task{7862cf6 #6 typestandard A1000:com.xxx.launcher U0 visibletrue visibleRequestedfalse modefullscreen translucenttrue sz1}positionChildTaskAt(position, child.asTask(), includingParents);if (includingParents getParent() ! null (moveToTop || moveToBottom)) {Slog.w(TAG, xww positionChildAt 6, this this getParent() getParent().toString());getParent().positionChildAt(moveToTop ? POSITION_TOP : POSITION_BOTTOM, this / child /, true / includingParents /);
frameworks/base/services/core/java/com/android/server/wm/DisplayArea.javaif (includingParents parent ! null (position POSITION_TOP || position POSITION_BOTTOM)) {Slog.w(TAG, xww positionChildAt 18, this this);parent.positionChildAt(position, this / child /, true / includingParents /);
frameworks/base/services/core/java/com/android/server/wm/WindowContainer.javacase POSITION_TOP: Slog.w(TAG, xww addChild 4 child child.toString() position position this this.toString());mChildren.add(child); //ww addChild 4 childDisplay{#2 stateON size1920x1080 ROTATION_0 nameavd_launcher} position2147483647 thiscom.android.server.wm.RootWindowContainer973f7ec
frameworks/base/services/core/java/com/android/server/wm/Task.java mTargetRootTask.startActivityLocked(mStartActivity, topRootTask ! null ? topRootTask.getTopNonFinishingActivity() : null, newTask, isTaskSwitch, mOptions, sourceRecord);if (!r.mLaunchTaskBehind allowMoveToFront (!isOrhasTask || newTask)) { positionChildAtTop(rTask);
frameworks/base/services/core/java/com/android/server/wm/Task.java moveToFront(positionChildAtTop);frameworks/base/services/core/java/com/android/server/wm/InputMonitor.java
populateInputWindowHandle
frameworks/base/services/core/java/com/android/server/wm/WindowContainer.javafinal boolean focusable w.canReceiveKeys() (mService.mPerDisplayFocusEnabled || mDisplayContent.isOnTop());Slog.w(TAG, xww isOnTop 3, this toString() parent (parent null ? null : parent.toString()) parent.getTopChild() (parent.getTopChild() null ? null : parent.getTopChild().toString()));if(parent ! null){for (int i parent.mChildren.size() - 1; i 0; –i) {Object child parent.mChildren.get(i);Slog.w(TAG, xww isOnTop, i i , child child.toString());}} return parent ! null parent.getTopChild() this parent.isOnTop();//isOnTop 3, thisDisplay{#3 stateON size1920x1080 ROTATION_0 nameavd_launcher} parentcom.android.server.wm.RootWindowContainerbf43992 parent.getTopChild()Display{#3 stateON size1920x1080 ROTATION_0 nameavd_launcher}
frameworks/base/services/core/java/com/android/server/wm/WindowList.java return mChildren.peekLast();return size() 0 ? get(size() - 1) : null;
frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.javaparent.isOnTop() //parentcom.android.server.wm.RootWindowContainerbf43992return true; addWindowToken流程
frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
addWindowToken
frameworks/base/services/core/java/com/android/server/wm/WindowContainer.javada.addChild(token);Slog.w(TAG, xww addChild 2 child child.toString() this this.toString()); //xww addChild 2 childWindowToken{a0b2c76 android.os.Binder9f68311} thisLeaf:3:14132637315mChildren.add(positionToAdd, child);frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java
addChildSlog.w(TAG, xww addChild 3 child child.toString() index index this this.toString());mChildren.add(index, child); 打印窗口信息
frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java void FindChildInfo(E node, String indent){Slog.w(TAG, FindMeshInfo: node indent |– node , size node.mChildren.size());if(node.mChildren.size() 0){return;}}void FindChild(E node, String indent){indent | ;FindChildInfo(node, indent);for(int i 0; i node.mChildren.size(); i){FindChild((E)node.mChildren.get(i), indent);}}frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java
positionChildAtswitch (position) {case POSITION_TOP:if(child.toString().contains(avd_launcher)){String str new String();Slog.w(TAG, xww addChild xxxxx begin);this.FindChild((E)this, str);Slog.w(TAG, xww addChild xxxxx end);} FindMeshInfo: node| |–com.android.server.wm.RootWindowContainer58ef5a3, sizexxxFindMeshInfo: node| | |–Display{#4 stateON size1920x1080 ROTATION_0 nameavd_launcher}, size4FindMeshInfo: node| | | |–WindowedMagnification:0:31251785581, size7FindMeshInfo: node| | | | |–FullscreenMagnification:0:1445167010, size3FindMeshInfo: node| | | | | |–Leaf:0:1131968563, size0FindMeshInfo: node| | | | | |–DefaultTaskDisplayArea48817648, size1FindMeshInfo: node| | | | | | |–Task{e9e1c50 #8 typestandard A1000:com.xxx.launcher U0 visibletrue visibleRequestedfalse modefullscreen translucenttrue sz1}, size1FindMeshInfo: node| | | | | | | |–ActivityRecord{bd29e49 u0 com.xxx.launcher/.MainActivity t8}, size0FindMeshInfo: node| | | | | |–Leaf:3:14182007657, size0FindMeshInfo: node| | | | |–ImePlaceholder:15:1626527214, size1FindMeshInfo: node| | | | | |–ImeContainer79362703, size0FindMeshInfo: node| | | | |–FullscreenMagnification:17:2393221148, size1FindMeshInfo: node| | | | | |–Leaf:17:23197452069, size0FindMeshInfo: node| | | | |–Leaf:24:25118182650, size0FindMeshInfo: node| | | | |–FullscreenMagnification:26:27175550635, size1FindMeshInfo: node| | | | | |–Leaf:26:27228557576, size0FindMeshInfo: node| | | | |–Leaf:28:28117926561, size0FindMeshInfo: node| | | | |–FullscreenMagnification:29:31170632390, size1FindMeshInfo: node| | | | | |–Leaf:29:31133016711, size0FindMeshInfo: node| | | |–Leaf:32:3236554676, size0FindMeshInfo: node| | | |–FullscreenMagnification:33:35160370653, size1FindMeshInfo: node| | | | |–Leaf:33:35179128146, size0FindMeshInfo: node| | | |–Leaf:36:3649187363, size0frameworks/base/core/java/android/app/ActivityOptions.java ActivityOptions(Bundle opts) { private static final String KEY_AVOID_MOVE_TO_FRONT android.activity.avoidMoveToFront; mAvoidMoveToFront opts.getBoolean(KEY_AVOID_MOVE_TO_FRONT, false); frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java startActivityInner Slog.w(TAG, xww startActivityInner, targetTask targetTask r r sourceRecord sourceRecord); //xww startActivityInner, targetTasknull rActivityRecord{44c341e u0 com.xxx.launcher/.MainActivity t2} sourceRecordnull if (!mAvoidMoveToFront mDoResume) { mTargetRootTask.getRootTask().moveToFront(reuseOrNewTask, targetTask); } frameworks/base/services/core/java/com/android/server/wm/Task.java moveToFront Slog.w(TAG, xww moveToFront 3, task task reason reason); //xww moveToFront 3, tasknull reasonreuseOrNewTask moveToFrontInner(reason, task); frameworks/base/services/core/java/com/android/server/wm/TaskDisplayArea.java task.getParent().positionChildAt(POSITION_TOP, task, true / includingParents /); Slog.w(TAG, xww positionChildAt 3aa, child.asTask() child.asTask()); //xww positionChildAt 3aa, child.asTask()Task{7862cf6 #6 typestandard A1000:com.xxx.launcher U0 visibletrue visibleRequestedfalse modefullscreen translucenttrue sz1} positionChildTaskAt(position, child.asTask(), includingParents); if (includingParents getParent() ! null (moveToTop || moveToBottom)) { Slog.w(TAG, xww positionChildAt 6, this this getParent() getParent().toString()); getParent().positionChildAt(moveToTop ? POSITION_TOP : POSITION_BOTTOM, this / child /, true / includingParents /); frameworks/base/services/core/java/com/android/server/wm/DisplayArea.java if (includingParents parent ! null (position POSITION_TOP || position POSITION_BOTTOM)) { Slog.w(TAG, xww positionChildAt 18, this this); parent.positionChildAt(position, this / child /, true / includingParents */); frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java case POSITION_TOP: Slog.w(TAG, xww addChild 4 child child.toString() position position this this.toString()); mChildren.add(child); //ww addChild 4 childDisplay{#2 stateON size1920x1080 ROTATION_0 nameavd_launcher} position2147483647 thiscom.android.server.wm.RootWindowContainer973f7ec frameworks/base/services/core/java/com/android/server/wm/Task.java mTargetRootTask.startActivityLocked(mStartActivity, topRootTask ! null ? topRootTask.getTopNonFinishingActivity() : null, newTask, isTaskSwitch, mOptions, sourceRecord); if (!r.mLaunchTaskBehind allowMoveToFront (!isOrhasTask || newTask)) { positionChildAtTop(rTask); frameworks/base/services/core/java/com/android/server/wm/Task.java moveToFront(positionChildAtTop);
frameworks/base/services/core/java/com/android/server/wm/InputMonitor.java populateInputWindowHandle frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java final boolean focusable w.canReceiveKeys() (mService.mPerDisplayFocusEnabled || mDisplayContent.isOnTop()); Slog.w(TAG, xww isOnTop 3, this toString() parent (parent null ? null : parent.toString()) parent.getTopChild() (parent.getTopChild() null ? null : parent.getTopChild().toString())); if(parent ! null){ for (int i parent.mChildren.size() - 1; i 0; –i) { Object child parent.mChildren.get(i); Slog.w(TAG, xww isOnTop, i i , child child.toString()); } } return parent ! null parent.getTopChild() this parent.isOnTop(); //isOnTop 3, thisDisplay{#3 stateON size1920x1080 ROTATION_0 nameavd_launcher} parentcom.android.server.wm.RootWindowContainerbf43992 parent.getTopChild()Display{#3 stateON size1920x1080 ROTATION_0 nameavd_launcher} frameworks/base/services/core/java/com/android/server/wm/WindowList.java return mChildren.peekLast(); return size() 0 ? get(size() - 1) : null; frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java parent.isOnTop() //parentcom.android.server.wm.RootWindowContainerbf43992 return true; frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java void FindChildInfo(E node, String indent){ Slog.w(TAG, FindMeshInfo: node indent |– node , size node.mChildren.size()); if(node.mChildren.size() 0){ return; } } void FindChild(E node, String indent){ indent | ; FindChildInfo(node, indent); for(int i 0; i node.mChildren.size(); i){ FindChild((E)node.mChildren.get(i), indent); } } frameworks/base/services/core/java/com/android/server/wm/WindowContainer.java positionChildAt switch (position) { case POSITION_TOP: if(child.toString().contains(avd_launcher)){ String str new String(); Slog.w(TAG, xww addChild xxxxx begin); this.FindChild((E)this, str); Slog.w(TAG, xww addChild xxxxx end); }
- 上一篇: 手机网站打开微信登录网页设计导航条怎么做
- 下一篇: 手机网站打开微信支付功能好的网站开发培训
相关文章
-
手机网站打开微信登录网页设计导航条怎么做
手机网站打开微信登录网页设计导航条怎么做
- 技术栈
- 2026年04月20日
-
手机网站搭建公司软件外包项目
手机网站搭建公司软件外包项目
- 技术栈
- 2026年04月20日
-
手机网站存储登录信息做空包网站
手机网站存储登录信息做空包网站
- 技术栈
- 2026年04月20日
-
手机网站打开微信支付功能好的网站开发培训
手机网站打开微信支付功能好的网站开发培训
- 技术栈
- 2026年04月20日
-
手机网站大全排行深圳专门做网站的公司
手机网站大全排行深圳专门做网站的公司
- 技术栈
- 2026年04月20日
-
手机网站单页面如何编辑网站
手机网站单页面如何编辑网站
- 技术栈
- 2026年04月20日
