MultiWindow实现窗口的层叠

本文详细介绍了Android MultiWindow模式下如何实现窗口的层叠,主要关注ActivityStack的adjustStackFocus()方法,该方法在处理窗口焦点变化时起到关键作用。如果遇到疑问,作者建议参考其另一篇关于窗口实现逻辑的文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android MultiWindow实现窗口的层叠


方法:ActivityStack adjustStackFocus(ActiviyRecord r, boolean newTask) {}

主要代码:

+            int parentStackId = HOME_STACK_ID;// 桌面 定义为: 0
+            int intentFlags = 0;
+
+            // FIXME: mContext is not merged into 5.1 originally.
+            boolean multiwindowEnabled = Settings.System.getInt(mService.mContext.getContentResolver(),
+                    TIETO_MULTIWINDOW_ENABLED, 0) != 0;
+            if (multiwindowEnabled && (r.intent != null)) {
+                r.intent.addFlags(Intent.FLAG_ACTIVITY_RUN_IN_WINDOW);
+            }
+
+            intentFlags = (r.intent != null) ? r.intent.getFlags() : 0;
+            boolean isMultiwindow = (intentFlags & Intent.FLAG_ACTIVITY_RUN_IN_WINDOW) != 0;
+            if (!isMultiwindow) {//上为false  --> 多窗口状态
+                final ActivityContainer container = r.mInitialActivityContainer;
+                if (container != null) {
+                    // The first time put it on the desired stack, after this put on task stack.
+                    r.mInitialActivityContainer = null;
+                    return container.mStack;
+                }
+
+                if (mFocusedStack != mHomeStack && (!newTask ||
+                        mFocusedStack.mActivityContainer.isEligibleForNewTasks())) {
+                    if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
+                            "adjustStackFocus: Have a focused stack=" + mFocusedStack);
+                    return mFocusedStack;//返回应用的焦点
+                }
+
+                final ArrayList<ActivityStack> homeDisplayStacks = mHomeStack.mStacks;
+                for (int stackNdx = homeDisplayStacks.size() - 1; stackNdx >= 0; --stackNdx) {//打开很多应用窗口
+                    final ActivityStack stack = homeDisplayStacks.get(stackNdx);
+                    if (!stack.isHomeStack()) { //不是桌面
+                        if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG,
+                                "adjustStackFocus: Setting focused stack=" + stack);
+                        mFocusedStack = stack;
+                        return mFocusedStack;
+                    }
+                }
+            }

如果有疑惑可以集合我的另一篇文章窗口实现的逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值