Как сделать так, чтобы деятельность переупорядочивалась на фронт "по-настоящему"?
Я использую 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.stackru/mythirdActivity}:
246: Window #4 Window{7e3a230 u0 com.stackru/mySecondActivity}:
273: Window #3 Window{7a4b856 u0 com.stackru/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.stackru/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.stackru/mythirdActivity}:
246: Window #4 Window{7e3a230 u0 com.stackru/mySecondActivity}:
273: Window #3 Window{7a4b856 u0 com.stackru/myFirstActivity}:
357: Window #0 Window{5a3ffdc u0 com.anifree.engine.Wallpaper}:
xb@dnxb:~/Downloads$
Поскольку скрытие / отображение фона для перемещения окна возможно, это заставляет меня задуматься о том, можно ли программно сделать mySecondActivity поверх mythirdActivity, например:
Window #4 Window{7e3a230 u0 com.stackru/mySecondActivity}:
Window #5 Window{7555f63 u0 com.stackru/mythirdActivity}:
Window #3 Window{7a4b856 u0 com.stackru/myFirstActivity}:
Обратите внимание, что я не говорю о новом экземпляре, я имею в виду тот же идентификатор окна Window{7e3a230
перейти наверх без изменения идентификатора окна.
Является ли это возможным? Или я неправильно понимаю?
2 ответа
Убедитесь, что вы не установили FLAG_ACTIVITY_CLEAR_TOP
, так как FLAG_ACTIVITY_REORDER_TO_FRONT
флаг будет игнорироваться, если FLAG_ACTIVITY_CLEAR_TOP
также указано.
Приведенный ниже фрагмент кода не создаст новый экземпляр, т. Е. Новый WindowId для вашего случая, и поднимет активность на первое место, если она уже есть в истории ваших действий.
Intent i = new Intent(context, YourActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
Я понял, что я должен использовать Intent.FLAG_ACTIVITY_MULTIPLE_TASK
(с правильным манифестом launcheMode
), чтобы сделать его многозадачным, чтобы окно (я) в одном и том же стеке задач можно было переупорядочить как группу в верх / низ другой задачи, сохранив тот же идентификатор окна. moveTaskToBack(true);
также могу сделать это, но я заметил, что он не может вернуться на передний план.