3

アプリケーションに原因不明のバグがあります。AHomeActivity - 、TestActivity -Bおよび ResultActivity -の3 つのアクティビティがあります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);

これで、このプロセスを問題なく無限に繰り返すことができます。ただし、を使用して startにパラメーターを送信することにより、ユーザーがviaBから開始できるようにするショートカットがあります。ここで、 activity で戻るボタンを押すと、 に戻るのではなく、アクティビティが再開されます。CAA 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アクティビティから戻るボタンを押すと、ホームアクティビティが繰り返し呼び出され、アクティビティBが再起動し続けるのではないかと疑ってprotected void onBackendStarted()ます..

アップデート:

アクティビティ 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 に答える