0

アプリケーションが循環する 4 つのアクティビティがあります。最初のものは膨大な量のデータをフェッチするので、それを複数回実行したくありません。ユーザーが最後のアクティビティで戻るキーを押した場合、アクティビティをリロードせずに最初のアクティビティに戻りたいということです。私は現在 startActivityForResult メソッドを考えており、前の 2 つのメソッドを終了していますが、より良い解決策があるかもしれません。

シナリオ:

ここに画像の説明を入力

4

2 に答える 2

2

ハスラーン、

最初に理解しなければならないことは、Activity をリロードするかどうかについてほとんど選択肢がないということです。それはシステムによって(大部分)決定されます。そうは言っても、システムがアクティビティを強制終了したいという欲求を制限するためにできることはたくさんあります。さらに、このような閉鎖の可能性の影響を制限するために、自由に使用できる多くのツールを使用できます。

  1. 重要でなくなるので、すべての子アクティビティを終了します。これによりリソースが解放され、使用されていないアクティビティを削除する必要がなくなります (一時的であっても)。

  2. 負荷を制限するシンプルで賢い方法を見つけてください。

提供された情報に基づいて、提案されたソリューションは両方を達成するための実行可能な方法です。ただし、「アクティビティ C が開いている間、アクティビティ B をアクティブにする必要がありますか?」と尋ねます。そうでない場合は、次のことを行うことができます。

  1. startActivityForResult(アクティビティ B)

  2. アクティビティ B が完了したら、結果をアクティビティ A に送り返し、startActivityForResult(Activity C)

  3. 最後に、Activity C が完了したら、startActivityForResult(Activity D) を実行すると、何の努力もせずに戻ることができ、他のアクティビティを閉じる必要はありません。

さらに、アクティビティ C で [戻る] を押すと、キャンセルされた結果をアクティビティ A に提供し、必要に応じてアクティビティ B を強制的に再開することができます。アクティビティ B に必要な処理によっては、これはアプリにとってまったく面倒ではない場合があります。

これにどのようにアプローチするかに関係なく、必要に応じてすぐにリロードできる onResume() など、このデータをキャッシュする方法を見つけることをお勧めします。これは、元のアクティビティが他のアクティビティのために解放されないようにする方法がないためです。

お役に立てれば、

ファジカルロジック

于 2012-06-08T11:19:42.743 に答える
1

これを使用してみてください:

    Intent a = new Intent(this,A.class);
    a.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(a);
    return true;

アクティビティ A は、新しいインスタンスを作成せずに、前面に並べ替えられます。インテントを介してエクストラを渡したい場合は、アクティビティ A の onNewIntent(intent) でインテント エクストラを取得できます。

于 2012-06-08T11:09:21.443 に答える