알아볼 수없는 응용 프로그램에 버그가 있습니다. HomeActivity - A
, TestActivity - B
및 ResultActivity - C
의 세 가지 활동이 있습니다.돌아가는 대신 뒤로 버튼이 작업을 다시 시작합니다.
활동 A
는
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
이 그런 활동 B
이 같은 방법으로 C
시작 정상적인 방법으로 B
를 시작합니다. C
이 완료되면 그것은 어떤 문제없이,이
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
이제 프로세스가 반복 될 수 무한히 같은 스택을 삭제 A
로 돌아갑니다. 그러나 A
A
A
B
을 시작하는 데 사용하는 A
intent.putExtra("startTest", true);
에 매개 변수를 보내 사용자가 C
을 통해 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는 아니기 때문에 나는 정말로 잃어버린다. 검색은 정말 아무것도 나에게 가져다주지 않으므로 어떤 통찰력도 인정 될 것입니다. 여기에 편집
은 내가 생각하는이 같은 시도 활동
세 가지 활동 모두에 대해 일부 코드 스 니펫을 게시 할 수 있습니까? –
예, 특히 "사용자가 매개 변수를 A로 보내 A를 통해 C에서 B를 시작할 수있는 바로 가기"와 관련된 더 많은 코드를 게시하십시오. – Stan
일부 코드가 추가되었습니다. ResultActivity의 doStartTest()에주의하십시오. – jurgemaister