0

アプリからある程度独立している必要があるアプリケーション用のウィジェットがあります。

アクティビティ ワークフローは次のようになります。

ウィジェット -> レシーバーとして機能するアクティビティ

Receiver -> LoginPage または Activity A (ログイン状態による)

ログインページ -> アクティビティ A

アクティビティ A onKeyDown -> アクティビティ B

アクティビティ B onKeyDown -> ホーム画面。

onKeyDown を押すとアクティビティ A に送り返されるアクティビティ B まで問題はありません。FLAG_ACTIVITY_CLEAR_TOPフラグを使用し、アクティビティ B の開始時にアクティビティを終了しています。

CLEAR_TOP フラグを使用して ActivityA から ActivityB に移動すると、Activity スタックがクリアされ、ActivityB で onKeyDown() メソッドでアクティビティを終了すると想定されますが、アプリが閉じられると想定されていますが、そうではありません。なんで?

また、レシーバーで FLAG_ACTIVITY_CLEAR_TASK と FLAG_ACTIVITY_NEW_TASK を使用しようとしていますが、メカニズムがよくわかりません。これについて何か考えはありますか?

4

2 に答える 2

1

実際、FLAG_ACTIVITY_CLEAR_TOPは、アクティビティBが開始されていない場合、またはBackStackの2番目のアクティビティとして戻ってきた場合は、アクティビティBを開始します。アクティビティAを終了するには、アクティビティBの開始後にfinish()を呼び出すか、Aの開始時に履歴フラグを追加しません。

于 2012-09-24T09:57:58.693 に答える
1

@JesusS: 前方への移行中に、そのような方法でアクティビティを終了できるかどうかは疑問です。

から移動するシナリオを考えてみましょうActivity A to Activity B。ここで、殺しActivity Aて移動したい場合は、インテントにフラグを付けず に (移動元の場所) をActivity B呼び出し、その後にonを呼び出します。startActivity(intent);activity A to Bfinish()activity A

私の理解によると、Intent.FLAG_ACTIVITY_CLEAR_TOP後方遷移中、つまりスタックにそのアクティビティが既にある場合にのみ使用できます。

次のシナリオを検討してください。

A --> B --> C --> D

ここで、アクティビティをクリアしてアクティビティ D からアクティビティ A に戻りたい場合は、移動できますIntent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP

その結果、アクティビティ D、C、B(LIFO) がスタックから削除され、アクティビティ Aactivity Aの を呼び出すことによって再開されます。onResume()

于 2012-09-24T10:37:26.787 に答える