#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 раньше.
Кто-нибудь, пожалуйста, знает, почему это происходит?