0

これが私の問題です。アプリケーションに複数のアクティビティがあり、そのうちの2つは少し「特別」です。アクティビティAはホームタイプのアクティビティであり、他のアクティビティを起動するために使用されます。また、バックグラウンドから更新できる他の情報も保持しています(onNewIntentを使用)。マニフェストで、私はそれをsingleTopとして宣言しました。結果に対して他のアクティビティを開始するため、singleTaskまたはInstanceにすることはできません(startActivityForResultはそれらで機能しません)。アクティビティBはスタンドアロンのアクティビティであり、特定のイベントで起動され、singleTopとしても宣言されます。また、結果を得るために他のアクティビティを開始し、onNewIntentも使用します。対応するアクティビティにリンクされている2つの個別の通知があります。私は両方に使用しています

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

通常のフローは次のとおりです。

  1. Aが実行されています
  2. 何かが起こります-Bが起動されます
  3. ユーザーがホームボタンを押すと、AとBの2つの通知があります

そして問題:ユーザーがAの通知を押すと、Aは起動されますが、その後ユーザーがBの通知を押すと、Bは強制終了されます(アクティビティは停止していますが、古いインスタンスが必要です

私はこの記事を読みました-http ://developer.android.com/guide/components/tasks-and-back-stack.html 私の理解では、FLAG_ACTIVITY_NEW_TASKは別々のタスクでアクティビティを起動する必要があり、FLAG_ACTIVITY_CLEAR_TOPはこの場合Bを殺すべきではありません。

回避策は、ロジックを作り直し、それらをsingleTasksにして、onNewIntentの他のアクティビティからの結果を処理することですが、別の解決策が可能な場合は、この方法を使用しないことをお勧めします。私も試しました

FLAG_ACTIVITY_REORDER_TO_FRONT | FLAG_ACTIVITY_SINGLE_TOP 

FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP

Bを起動しますが、どちらも機能しません。

4

1 に答える 1

0

私の問題は、両方のアクティビティが同じタスクで実行されることでした。ドキュメントにもかかわらず、FLAG_ACTIVITY_NEW_TASKは新しいタスクでアクティビティを開始しません-それは置きます。その特定のアクティビティのマニフェストでandroid:taskAffinityを使用し、それを一意の値に設定する必要があります。そうして初めて、新しいタスクで開始されます。そうすれば、Aに使用されるFLAG_ACTIVITY_CLEAR_TOPは、Bを破棄しません。

于 2012-10-02T15:38:29.197 に答える