Предыдущее действие backstack запускается внутри pipMode android

#android #android-intent #activity-lifecycle #back-stack #picture-in-picture

Вопрос:

У меня есть 3 вида деятельности

  • Основная активность (М)
  • Активность в чате (C)
  • Активность комнаты (R)

В MainActivity есть 2 фрагмента внутри

  • Фрагмент групп (Gf)
  • Фрагмент контактов (Cf)

The Manifest.xml имеет объявить эти действия, как показано ниже

 <activity
            android:name=".ui.activities.main.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/NoActionBar"
            android:windowSoftInputMode="stateHidden|adjustNothing" />

<activity
            android:name=".ui.activities.chatroom.room.ChatRoomActivity"
            android:parentActivityName=".ui.activities.main.MainActivity"
            android:theme="@style/NoActionBar"
            android:launchMode="singleTask"
            android:windowSoftInputMode="stateHidden|adjustResize">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".ui.activities.main.MainActivity" />
        </activity>

<activity
            android:name=".ui.activities.room.RoomActivity"
            android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|screenSize|fontScale"
            android:excludeFromRecents="true"
            android:launchMode="singleTask"
            android:resizeableActivity="true"
            android:showOnLockScreen="true"
            android:showWhenLocked="true"
            android:supportsPictureInPicture="true"
            android:theme="@style/NoActionBar"
            android:windowSoftInputMode="stateAlwaysHidden" />

 

Если кто-то нажмет на Группу/Контакт, мы перейдем от основной активности (по фрагменту) к активности в чате с кодом ниже

 val chatFromGroupIntent = Intent(activity, ChatRoomActivity::class.java).apply {
            putExtras(Bundle().apply {
                putInt("groupId", groupId)
            })
            putExtra(CHAT_ROOM_TYPE, CHAT_WITH_GROUP)
        }
        activity?.startActivity(chatFromGroupIntent)
 

Из текущей функции чата, если мы нажмем videoCallBtn , мы перейдем к функции комнаты, в которой мы видим видеозвонок, с помощью кода ниже

 startActivity(Intent(requireActivity(), RoomActivity::class.java).apply {
            putExtras(
               Bundle().apply {
               putParcelable("server", server)
               putParcelable("contact", contact)
               putParcelable("group", group)
               putString("title", title)
               putString("content", content)
               putBoolean("isIncoming", isIncoming)
        })
  })
 

Everything is ok up to now and works pretty fine!

Теперь, когда видеовызов в Сети, и я нажимаю кнопку «Домой» устройства, RoomActivity входит в режим PIP, как и ожидалось, и я вижу ChatRoomActivity и RoomActivity в режиме PIP. Если я вернусь хотя бы на один шаг назад, я перейду к MainActivity, чтобы увидеть MainActivity и RoomActivity в режиме PipMode. Однако, если я решу открыть чат-активность, скажем, с другой группой/контактом, внезапно окно PipMode загрузит чат-активность, и активность комнаты исчезнет!!!

Как я могу узнать, что происходит?

Если я нажму на режим PIP с активностью в чате, я увижу активность в чате в полноэкранном режиме, а если я вернусь, я увижу активность в комнате, которая была в режиме PIP раньше.

Кто-нибудь, пожалуйста, знает, почему это происходит?