0

OK、これが私のケースです。

アクティビティ A、B、C、D があります。それらは、A -> C -> D の順序で互いに開始されます。B は A と交換可能です (組み合わせ B -> C -> D も同様に可能です)。また、イベントと別のアクティビティ E を待機するサービスもあります。イベントが発生したときの意図した動作は、どのアクティビティがフォアグラウンドにあるかによって異なります。

  • A または B が表示されている場合、またはアプリがまったくフォアグラウンドにない場合、スタック上のアクティビティの順序は変更されません。
  • C が表示されている場合は、C を削除して E をその場所に配置します。それぞれ A -> E または B -> E です。
  • D が表示されている場合、C と D の両方を削除し、その場所に E を配置します: A -> E または B -> E.

より一般的な解決策 (A -> C1 -> C2 -> ... のような状況の処理を A -> E に変更) は歓迎されます。アプリは将来拡張され、新しい機能が追加される予定です (彼らの正確な形状はまだ決定されていません)。

Android 開発者サイトのTasks and Back Stacksドキュメントと、この件に関するいくつかの SO スレッドに目を通しましたが、適切な解決策が見つかりませんでした。

何か案は?

4

1 に答える 1

0

次のようないくつかのメソッドをサブクラス化Applicationして追加できます。

public static MyApplication getInstance() // returns a reference to the application
public void setForegroundActivity(Activity);
public Activity getForegroundActivity(); //

次に、Activity のonResume()メソッドで call setForegroundActivity(this)、および call でonPause()呼び出しますsetForegroundActivity(null)

非同期イベントが呼び出されると、返されたアクティビティをチェックして、getForegroundActivity()それがどれであるかを判断できます。それがどのアクティビティであるかをどのように判断するかは、あなた次第です(たとえば、インスタンスのタイプを確認できます)。

于 2013-06-26T22:52:42.880 に答える