8

バックグラウンド

次のシーンを見てみましょう:

  1. ユーザーは、複数のアクティビティを持つアプリ X (gmail アプリなど) を使用します。
  2. アプリ X を少しナビゲートした後、彼はあなたのアプリに移動します。
  3. アプリでは、インテントを使用してこの X アプリを開始し、その中の特定のアクティビティに移動する必要があります。
  4. ユーザーはアプリ X でこの特定のアクティビティに移動します。
  5. ユーザーは、アプリ X にとどまるのではなく、アプリに戻ることを望んで、戻るボタンを押します。

別の同様のシナリオ:

  1. ユーザーはアクティビティ間でアプリをナビゲートします。
  2. アプリがバックグラウンドになりました (たとえば、ホーム ボタンを使用)。
  3. アプリは、クリックするとアプリの特定のアクティビティを開くという通知を表示します。
  4. ユーザーが通知をクリックすると、アプリの特定のアクティビティに移動します。
  5. ユーザーは、最後にアプリを離れたときに表示されたアプリの前のアクティビティに移動するのではなく、通知をクリックする前に表示されていたアプリに戻ることを望んで、戻るボタンを押します。

両方のシナリオの最後の手順は、既定の動作ではないようです。

これが、この目的に最適なフラグの組み合わせを検索した理由です。

問題

私が説明した動作を実現できる唯一のフラグはIntent.FLAG_ACTIVITY_MULTIPLE_TASK ( Intent.FLAG_ACTIVITY_NEW_TASKと共に) のようです。

ただし、Android API によると、このフラグは通常の使用には推奨されません。

独自の最上位アプリケーション ランチャーを実装する場合を除き、このフラグは使用しないでください。...

デフォルトのシステムにはグラフィカルなタスク管理が含まれていないため、ユーザーが起動したタスクに戻るための何らかの方法を提供しない限り、このフラグを使用しないでください。

この情報は、インテントに関するその他の説明と同じくらい紛らわしいようです。

同様の結果を達成するIntent.FLAG_ACTIVITY_CLEAR_TASKなど、私が見た他のインテントフラグがありますが、それらは奇妙な動作をしたり、高い API を使用したりします。

質問

このフラグを使用しても安全ですか? それに代わる良いものはありますか?

このフラグを使用することの危険性と、それを使用する API の記述の意味は何ですか?

4

1 に答える 1

3

最初のシナリオでは、アプリが別のアプリのアクティビティを開始する必要がある場合、アプリケーションと同じタスク内でこのアクティビティを開始できます。これに特別なインテント フラグを使用する理由はありません (FLAG_ACTIVITY_NEW_TASKまたはは必要ありませんFLAG_ACTIVITY_MULTIPLE_TASK)。シナリオのステップ 5 で、ユーザーはアプリケーションに戻ります (BACK は現在のタスクの前のアクティビティに移動するためです)。これは、標準のデフォルトの動作です。

あなたの 2 番目のシナリオでは、私の最初の応答は「それは標準的な動作ではありません」です。つまり、ユーザーはおそらく、通知をクリックする前に行っていたタスクに戻れるとは思っていないでしょう。ただし、本当にこれを実装したい場合は、通知から起動される特別なアクティビティを作成することをお勧めします。この特別なアクティビティはtaskAffinity、アプリケーションの残りのアクティビティとは異なる必要があります。この場合、特別なアクティビティが通知から起動されると、アプリケーションのタスクがフォアグラウンドに移動しません。. 特別なアクティビティのみを含む新しいタスクを作成するだけです。特別なアクティビティが表示されている場合、ユーザーは [戻る] キーを押すと、通知をクリックする前に作業していたタスクに戻ることができます。

一般に、使用しないでくださいFLAG_ACTIVITY_MULTIPLE_TASK。主な理由は、アプリケーション (またはその一部) を含む複数のタスクがある場合、ユーザーが特定のタスクに戻ることはほぼ不可能だからです。(タスクごとに) 異なる起動アイコンや異なるアプリケーション名を提供する方法はありません(そのため、ユーザーは「最近のタスク」リストに複数のタスクが表示されますが、どれがどれであるかはわかりません。このフラグを使用すると、約 100 万の副作用があり、一般的なアプリケーションでは、これを行う必要はまったくありません。

于 2013-11-04T16:12:14.737 に答える