時にはユーザーからの入力が必要なバックグラウンドで実行されるアンドロイドアプリ(音楽再生アプリ)があります。Androidが意図的に解雇されたときに実行していた道徳的なアプリに戻る
アプリから始まるMainActivityが起動しています。 MainActivityは音楽を演奏するコアプロセスを開始します。入力が必要であるとコアプロセスが判断すると、入力の新しいインテントが作成されます。
ホーム画面に戻り、別のアプリ(App Xと呼ぶ)を起動すると、音楽はバックグラウンドで再生し続けます。
今、あなたがApp Xにいる間、私の音楽アプリはユーザーの入力が必要です。入力アクティビティが画面上にポップアップし、ユーザは入力したいものを入力することができます。ただし、入力アクティビティが終了すると、音楽アプリのMainActivityが画面上の現在のアクティビティになります。私が欲しいのは、入力アクティビティが作成されると、スタックは似ているように見え、それは私が言うことができるものから
ので、アプリケーションXに戻って行くのです。
- 音楽アプリケーションの入力活動
- 私の音楽アプリのMainActivity
- のApp X
しかし、私はそれになりたい:
- 音楽アプリケーションの入力活動
- のApp X
- 私の音楽アプリのMainActivity
私はそれをどのように達成することができますか?
編集:
私はにリンクされている@marmor記事を読んで、私はsingleTopが正しい選択であることはよく分かりません。記事は言う:例えば
、(; Dは 上にあるスタックは-B-C-Dである)タスクのバックスタックがルートアクティビティの上にアクティビティB、C、およびDと からなると仮定する。 Dが デフォルトの「標準」起動モードを持つ場合、クラスの新しいインスタンスは が起動し、スタックはA-B-C-D-Dになります。しかし、Dの起動モード が "singleTop"の場合、Dの既存のインスタンスは onNewIntent()によってインテントを受け取ります。これはスタックの最上部にあるため、スタックは A-B-C-Dのままです。
実際には、inputActivityの複数のインスタンスを重ね合わせる必要があります。したがって、主なアクティビティがAで、inputActivityがBで、3つの入力イベントが発生した場合、ユーザーはそれらに応答せずにスタックをA-B-B-Bにする必要があります。これを防止するようなsingleTopサウンド。
これは、最後の入力イベントが発生したときにアプリケーションがフォアグラウンドにあったと仮定しています。 AppXがフォアグラウンドにあった場合、フォアグラウンドに最後に入ってから開始された入力アクティビティの下に、スタック内にあるはずです。または、アプリの主なアクティビティとすべての入力アクティビティの間にあるかもしれません。
例:
A-(APPX)-BBB
または
ABB-(APPX)-B
**コアプロセス**が意味するものがAndroidサービスの場合は、おそらく 'getActivity()。finish();'を使うだけで、Androidは自動的にApp Xに戻ります。サービスは、アプリケーションがシャットダウンされても、バックグラウンドでサービスを継続します。 –