2

Web サーバーからデータを取得し、このデータをリストビューに入れてユーザーに表示するアプリケーションがあります。関連する 4 つのアクティビティがあり、次のように呼び出すことができます。

A -> B -> C -> D

また

A -> B -> D

基本的に、A を除くすべてのアクティビティは Web からデータを取得しています。接続に問題があり、タイムアウトが発生した場合、アクティビティ B、C、および D がユーザーに通知し、A に戻るようにします。

そこで、私が今やったことは、A を起動モード singleTask に設定することです。このようにして、タイムアウト例外をキャッチし、A を開始する新しいインテントを呼び出すことができます。しかし、その間のアクティビティはどうなるでしょうか? A->B->C->D を呼び出してから、D で接続がタイムアウトしたとします。アプリは A に戻りますが、B と C はどうでしょうか。アンドロイドはこれらに対して onDestroy を自動的に呼び出しますか? アクティビティ スタックはどうなりますか? ヒントをいただければ幸いです。

乾杯

4

2 に答える 2

2

アクティビティ A を起動するときに、アクティビティ D からインテント フラグを設定します。

FLAG_ACTIVITY_CLEAR_TOP

このフラグを使用すると、A と現在のアクティビティの間にあるすべてのアクティビティがクリアされ、A が前面に表示されます。また、おそらく起動モードとして singleTask を使用する必要はありません。

于 2012-04-30T15:39:00.933 に答える
1

A->B->C->D を呼び出してから、D で接続がタイムアウトしたとします。これで、アプリは A に戻ります...

あなたの例では、すべての子アクティビティが startActivityForResult() で起動され、アクティビティ B & C が実装されている場合:

finishFromChild(Activity activity) {
    ...
    finish();
} 

アクティビティ D がタイムアウト後に finish() を呼び出すと、各子が順番に閉じられ (D -> C -> B -> A)、回収したい関連データが返される可能性があります。

于 2012-04-30T15:53:00.867 に答える