#android #kotlin
#Android #kotlin
Вопрос:
Я создал три действия в приложении для Android: MainActivity
, SecondActivity
, ThirdActivity
и регистрирую onCreate@taskId
событие этих действий.
Режим запуска SecondActivity
установлен на singleInstance
.
Затем я вставил две кнопки MainActivity
.
button1 startActivity(SecondActivity)
.
button2 startActivityForResult(SecondActivity)
.
button3 startActivity(ThirdActivity)
.
После нажатия кнопки button1 -> нажмите кнопку button3 я получил следующий журнал, который соответствует моим ожиданиям:
MainActivity onCreat@xxx0
SecondActivity onCreate@xxx1 // second activity is expected in a new task
ThirActivity onCreate@xxx0 // third
Но нажмите button2 -> нажмите button3:
MainActivity onCreat@xxx0
SecondActivity onCreate@xxx0 // it seems that startActivityForResult will make singleInstance activity not work
ThirdActivity onCreate@xxx1 // Here is the weird thing, the ThirdActivity is created on a new task!
Кто-нибудь может это объяснить?
Вот тест репозитория singleInstanceTest для воспроизведения.
Комментарии:
1.
Intent.FLAG_ACTIVITY_NEW_TASK
должно сработать.2. @Raghunandan Я добавляю этот флаг при запуске SecondActivity, ничего не изменилось.
3. Оно должно работать с флагом намерения, второе действие запускается в новой задаче
4. Кажется
singleInstance
, это не работаетstartActivityForResult
. Я думаю, если вы хотите сохранить текущее поведение, то из MainActivity просто используйте startActivity(SecondActivity). Затем используйте широковещательную передачу или EventBus для возврата результата в MainActivity.
Ответ №1:
В документах говорилось
если экземпляр действия уже существует в отдельной задаче, система направляет намерение существующему экземпляру через вызов его метода onNewIntent(), а не создает новый экземпляр.
Я использую определение singleTask
режима запуска, чтобы объяснить это поведение, потому что оно аналогично
- Когда вы нажимаете на
Button 1
негоSecondActivity
, и когда вы возвращаетесь (я предполагаю, что вы нажимаете назад или вызываетеfinish
), экземплярSecondActivity
выскакиваетBackStack
- Когда вы нажимаете на
Button 2
экземплярSecondActivity
not exits, soSystem
создаст новый экземпляр дляSecondActivity
Чтобы понять это, вам следует попробовать follow MainActivity
-> startActivityForResult(SecondActivity)
-> Create button в SecondActivity
start ThirdActivity
-> в ThirdActivity
create button и вызвать startActivityForResult(SecondActivity)
. Запишите это, чтобы понять.