Как сделать так, чтобы деятельность переупорядочивалась на фронт? - PullRequest
0 голосов
/ 21 декабря 2018

Я использую 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$ 

Поскольку скрыть/ Показать фон для перемещения окна возможно , это заставляет меня задуматься, возможно ли сделать mySecondActivity поверх mythirdActivity программно, например:

Window #4 Window{7e3a230 u0 com.stackoverflow/mySecondActivity}:
Window #5 Window{7555f63 u0 com.stackoverflow/mythirdActivity}:
Window #3 Window{7a4b856 u0 com.stackoverflow/myFirstActivity}:

Обратите внимание, что я не говорюЧто касается нового экземпляра, я имею в виду тот же идентификатор окна Window{7e3a230 перейти наверх без изменения идентификатора окна.

Возможно ли это?Или я неправильно понимаю?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Я понял, что должен использовать Intent.FLAG_ACTIVITY_MULTIPLE_TASK (с правильным манифестом launcheMode), чтобы сделать его многозадачным, чтобы окна (окна) в одном и том же стеке задач можно было перегруппировать как группу к вершине / ниже другой задачи при сохранениитот же идентификатор окна.moveTaskToBack(true); также может сделать это, но я заметил, что он не может вернуться на передний план.

0 голосов
/ 21 декабря 2018

Убедитесь, что вы не установили 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);
...