我使用 FLAG_ACTIVITY_REORDER_TO_FRONT
尝试在活动之间切换。由于这是越野车(回来时有时隐藏),所以我尝试潜入其中。
FLAG_ACTIVITY_REORDER_TO_FRONT
并没有真正使活动移至顶部,正如我从ADB中看到的那样,活动顺序从未更改:
xb@dnxb:~/Downloads$ adb shell dumpsys window windows | grep -n 'Window #'
2: Window #13 Window{f7d02ea u0 NavigationBar}:
31: Window #12 Window{fdfb1ed u0 com.android.systemui}:
56: Window #11 Window{b626be1 u0 StatusBar}:
84: Window #10 Window{bd80846 u0 KeyguardScrim}:
109: Window #9 Window{f127fe9 u0 AssistPreviewPanel}:
134: Window #8 Window{f5a5c17 u0 DockedStackDivider}:
162: Window #7 Window{5170bb1 u0 com.android.systemui}:
188: Window #6 Window{201fb75 u0 InputMethod}:
217: Window #5 Window{7555f63 u0 com.stackoverflow/mythirdActivity}:
246: Window #4 Window{7e3a230 u0 com.stackoverflow/mySecondActivity}:
273: Window #3 Window{7a4b856 u0 com.stackoverflow/myFirstActivity}:
300: Window #2 Window{cc1c79f u0 com.huawei.android.launcher/com.huawei.android.launcher.unihome.UniHomeLauncher}:
329: Window #1 Window{f2df7b0 u0 com.android.systemui/com.android.systemui.recents.RecentsActivity}:
357: Window #0 Window{5a3ffdc u0 com.anifree.engine.Wallpaper}:
FLAG_ACTIVITY_REORDER_TO_FRONT
仅更改"焦点状态":
mDrawState=NO_SURFACE mLastHidden=true
:
mSurface=Surface(name=com.stackoverflow/mySecondActivity)
Surface: shown=true layer=21020 alpha=1.0 rect=(0.0,0.0) 1080.0 x 1920.0 blurRadius = 0 blurRound = (0,0) blurAlpha = 0.0 blurRegion = null blurBlank = null
mDrawState=HAS_DRAWN mLastHidden=false
但是,如果我通过按主页按钮来播放,我可以看到启动器窗口能够执行"真实移动"到顶部:
xb@dnxb:~/Downloads$ adb shell dumpsys window windows | grep -n 'Window #'
2: Window #13 Window{f7d02ea u0 NavigationBar}:
31: Window #12 Window{fdfb1ed u0 com.android.systemui}:
56: Window #11 Window{b626be1 u0 StatusBar}:
84: Window #10 Window{bd80846 u0 KeyguardScrim}:
109: Window #9 Window{f127fe9 u0 AssistPreviewPanel}:
134: Window #8 Window{f5a5c17 u0 DockedStackDivider}:
162: Window #7 Window{5170bb1 u0 com.android.systemui}:
188: Window #6 Window{201fb75 u0 InputMethod}:
217: Window #5 Window{cc1c79f u0 com.huawei.android.launcher/com.huawei.android.launcher.unihome.UniHomeLauncher}:
248: Window #4 Window{f2df7b0 u0 com.android.systemui/com.android.systemui.recents.RecentsActivity}:
217: Window #5 Window{7555f63 u0 com.stackoverflow/mythirdActivity}:
246: Window #4 Window{7e3a230 u0 com.stackoverflow/mySecondActivity}:
273: Window #3 Window{7a4b856 u0 com.stackoverflow/myFirstActivity}:
357: Window #0 Window{5a3ffdc u0 com.anifree.engine.Wallpaper}:
xb@dnxb:~/Downloads$
因为hide/un und to to Move Window是可能的,这让我感到奇怪是否可以使mysecondactivity在神话上进行编程,例如:
Window #4 Window{7e3a230 u0 com.stackoverflow/mySecondActivity}:
Window #5 Window{7555f63 u0 com.stackoverflow/mythirdActivity}:
Window #3 Window{7a4b856 u0 com.stackoverflow/myFirstActivity}:
请注意,我不是在谈论新实例,我的意思是相同的窗口ID Window{7e3a230
移动到TOP而不更改窗口ID。
有可能吗?还是我误会了?
确保您不设置FLAG_ACTIVITY_CLEAR_TOP
,因为如果还指定了FLAG_ACTIVITY_CLEAR_TOP
,FLAG_ACTIVITY_REORDER_TO_FRONT
标志将被忽略。
下面的代码片段不会创建新实例,即适合您的情况的新实例,如果您在活动历史记录中已经有了它,则会将活动提升到顶部。
Intent i = new Intent(context, YourActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
我发现我必须使用 Intent.FLAG_ACTIVITY_MULTIPLE_TASK
(具有正确的清单 launcheMode
)来使其多任务,以便可以将同一任务堆栈中的窗口作为组重新订购,以置于顶部/下方/下方保留同一窗口ID的其他任务。moveTaskToBack(true);
也可以做到这一点,但我注意到它无法移回前景。