3

我的应用程序中有一个错误,我无法弄清楚。共有三个活动: 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);

现在这个过程可以无限重复,没有任何问题。但是,我有一个快捷方式,可以让用户BCvia开始,方法是向which uses to startA发送参数。现在发生的情况是,如果我按下后退按钮,处于活动状态,活动将重新启动,而不是返回到.A intent.putExtra("startTest", true);ABBA

根据以下内容,活动堆栈似乎很好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 中运行良好,我真的迷路了。搜索并没有真正让我得到任何东西,所以任何见解都会受到赞赏。

编辑 以下是我认为活动中的相关内容

4

2 回答 2

3

正如您使正常情况变得复杂一样。如果您在活动中使用startActivityForResult()onActivityResult()具有必要的标志和条件,则永远不会发生上述问题..

原因:

正如我怀疑当您从 B Activity 按下返回按钮时,它会反复调用protected void onBackendStarted()HomeActivity并且您的 Activity B 继续重新启动..

更新:

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

就像是:

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

于 2013-01-11T08:50:10.040 回答
0

试试这样。。

@Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();
        System.gc();
        Intent I = new Intent(EditProfile.this, SettingActivity.class);
        startActivity(I);
        finish();
    }
于 2013-01-11T08:41:26.560 回答