4

シナリオは次のとおりです。

アプリを起動し、アクティビティ A を開始し、B に移動してから C に移動し、ホーム ボタンを押します。Cは破壊されます。タスク マネージャーを起動し、アプリのアイコンを押します。アクティビティ C が再作成されています。この動作を停止するにはどうすればよいですか? 私が望むのは、アクティビティ A に戻ることです。

これに最も近いのは、アクティビティ B、C を Intent.FLAG_ACTIVITY_NO_HISTORY で起動することでした。ただし、このフラグの問題は、アクティビティ B、C がアプリの存続期間を通じて再作成されないようにすることです (タスク マネージャーがユーザーを A に導くと、アクティビティは作成可能になるはずです)。

編集:代わりにこのアプローチを使用すると、 Intent.FLAG_ACTIVITY_NO_HISTORY ケースと同じ動作が観察されます:

class C extends Activity
{
...
    @Override
    protected void onDestroy() 
    {
        // last resort
        finish();
        super.onDestroy();      
                //finish();
    }
}

onDestroy() が一度呼び出されると、アクティビティ C に戻ることはできません :(

ありがとう

4

2 に答える 2

0

人間対機械の週末の後、これは私が経験したことです:

noHistory ="true" アクティビティ属性により、アクティビティ スタック内でそれらの下にある別のアクティビティから起動 (startActivity()) されませんでした。問題は、アクティビティ ナビゲーション ロジック全体が、このフラグをインテントに追加するメソッドを通過したことです。

context.startActivity(intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT));

Android は「noHistory」アクティビティを「最前面に並べ替える」ことができません。私はこれをバグと考えています。noHistory アクティビティは既に finish() されているため、その新しいインスタンスを呼び出す必要があります...動作したのは、アクティビティ A で FLAG_ACTIVITY_CLEAR_TOP を使用することでした (OP を参照)。このようにして、B と C はすべてのシナリオで適切にインスタンス化されました。しかし、これでは十分ではありませんでした。一方では OOM エラーが発生し、他方ではライフサイクル/アプリ ロジックの複雑さが原因で、残したすべてのアクティビティを終了することになりました。

于 2012-09-24T04:54:27.083 に答える