Кнопка "Назад" возобновляет деятельность вместо перехода назад
В моем приложении есть ошибка, которую я не могу выяснить. Есть три вида деятельности: HomeActivity - A
, TestActivity - B
и ResultActivity - C
,
Деятельность A
катера B
нормальным образом
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
Тогда деятельность B
катера C
таким же образом. когда C
сделано это восходит к A
очистка стека, как это
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Теперь процесс можно повторять до бесконечности, без каких-либо проблем. Тем не менее, у меня есть ярлык, который позволяет пользователю начать B
от C
с помощью A
отправив параметр в A
intent.putExtra("startTest", true);
который A
использует для начала B
, Теперь, что происходит, если я нажимаю кнопку "Назад", находясь в деятельности B
, действие возобновляется вместо возвращения к A
,
Стек активности, кажется, просто отлично в соответствии с adb shell dumpsys activity
:
Activity stack:
* TaskRecord{408276f0 #60 A com.company.app}
clearOnBackground=false numActivities=3 rootWasReset=true
affinity=com.company.app
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.company.app/.LoginActivity bnds=[120,241][240,391]}
realActivity=com.company.app/.LoginActivity
lastActiveTime=756688148 (inactive for 6s)
* Hist #12: HistoryRecord{40ab2248 com.company.app/.TestActivity}
packageName=com.company.app processName=com.company.app
launchedFromUid=10109 app=ProcessRecord{4089aed0 16527:com.company.app/10109}
Intent { cmp=com.company.app/.TestActivity }
frontOfTask=false task=TaskRecord{408276f0 #60 A com.company.app}
taskAffinity=com.company.app
realActivity=com.company.app/.TestActivity
base=/data/app/com.company.app-1.apk/data/app/com.company.app-1.apk data=/data/data/com.company.app
labelRes=0x0 icon=0x7f02000b theme=0x103000d
stateNotNeeded=false componentSpecified=true isHomeActivity=false
configuration={ scale=1.0 imsi=242/1 loc=nb_NO touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=22}
launchFailed=false haveState=false icicle=null
state=RESUMED stopped=false delayedResume=false finishing=false
keysPaused=false inHistory=true launchMode=0
fullscreen=true visible=true frozenBeforeDestroy=false thumbnailNeeded=false idle=true
waitingVisible=false nowVisible=true
* Hist #11: HistoryRecord{40a548e8 com.company.app/.HomeActivity}
packageName=com.company.app processName=com.company.app
launchedFromUid=10109 app=ProcessRecord{4089aed0 16527:com.company.app/10109}
Intent { flg=0x4000000 cmp=com.company.app/.HomeActivity }
frontOfTask=false task=TaskRecord{408276f0 #60 A com.company.app}
taskAffinity=com.company.app
realActivity=com.company.app/.HomeActivity
base=/data/app/com.company.app-1.apk/data/app/com.company.app-1.apk data=/data/data/com.company.app
labelRes=0x0 icon=0x7f02000b theme=0x103000d
stateNotNeeded=false componentSpecified=true isHomeActivity=false
configuration={ scale=1.0 imsi=242/1 loc=nb_NO touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=22}
launchFailed=false haveState=true icicle=Bundle[mParcelledData.dataSize=1192]
state=STOPPED stopped=true delayedResume=false finishing=false
keysPaused=false inHistory=true launchMode=0
fullscreen=true visible=false frozenBeforeDestroy=false thumbnailNeeded=false idle=true
Неважно, сколько раз я нажимаю кнопку возврата. Стек остается прежним, а активность B
продолжает перезапуск.
Теперь к еще более странной части: если я дважды коснусь кнопки "назад", она действительно вернется в стек, давая мне активность A
,
У меня нет особого нажатия кнопки "назад", и, поскольку она работает хорошо, в случае 1, но не в случае 2, я действительно потерян. Поиски не принесли мне ничего, поэтому любая оценка будет оценена.
РЕДАКТИРОВАТЬ Вот что я думаю, что соответствующие биты из деятельности
2 ответа
Как вы сделали нормальный сценарий сложный. Если у вас есть использование startActivityForResult()
а также onActivityResult()
с необходимыми флагами и условиями в вашей деятельности, то выше проблем не возникает..
Причина:
Как я сомневаюсь, когда вы нажимаете кнопку "Назад" из B Activity его вызов повторно protected void onBackendStarted()
HomeActivity И ваша деятельность B продолжает перезапуск..
Обновить:
Вы должны удалить startTest из Intent, как только начнется действие B. Так что в следующий раз он не будет запускаться повторно.
Что-то вроде:
getIntent().removeExtra("startTest");
в onBackendStarted()
,
Попробуй вот так..
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
System.gc();
Intent I = new Intent(EditProfile.this, SettingActivity.class);
startActivity(I);
finish();
}