gpt4 book ai didi

android - 后退按钮重新启动 Activity 而不是返回

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:20 25 4
gpt4 key购买 nike

我的应用程序中有一个我无法弄清楚的错误。共有三个 Activity :HomeActivity - A、TestActivity - B 和 ResultActivity - C

Activity A 以正常方式启动 B

Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);

然后 Activity B 以相同的方式启动 C。当 C 完成后,它会返回到 A 像这样清除堆栈

Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

现在这个过程可以无限重复,没有任何问题。但是,我有一个快捷方式,允许用户通过 AC 启动 B,方法是向 A 发送参数intent.putExtra("startTest", true); A 用来启动 B。现在,如果我在 Activity B 中按下后退按钮, Activity 将重新启动,而不是返回到 A

根据adb shell dumpsys activity, 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

我按下后退按钮多少次都没有关系。堆栈保持不变, Activity B 继续重新启动。

现在更奇怪的部分是:如果我双击后退按钮,它确实会返回到堆栈中,给我 A Activity 。

我对后退按钮没有任何特殊的处理,因为它在案例 1 中运行良好但在案例 2 中运行良好,我真的迷路了。搜索并没有真正让我得到任何东西,所以任何见解都将不胜感激。

编辑以下是我认为与 Activity 相关的内容

最佳答案

因为您使正常情况变得复杂。如果您在 Activity 中使用startActivityForResult()onActivityResult() 以及必要的标志和条件,那么上述问题永远不会发生。

原因:

正如我所怀疑的那样,当您从 B Activity 中按下后退按钮时,它会重复 protected void onBackendStarted() of HomeActivity 并且您的 Activity B 会继续重启..

更新:

一旦 Activity B 启动,您必须从 Intent 中删除 startTest。所以下次它不会重复启动。

类似于:

getIntent().removeExtra("startTest");onBackendStarted()

关于android - 后退按钮重新启动 Activity 而不是返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com