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;
+ }
+ }
+ }