バックグラウンドのスタッフを務めているサービスがあり、サービスが処理した結果を示すアクティビティを開始する必要があります。しかし、サービスが何度も開始される可能性があります。さて、私はこのアクティビティがすでにアクティブでない場合にのみ、このアクティビティを開始したいと思います。サービスでアクティビティが開始されているかどうかをチェック
これはどのような可能性と方法ですか?あなたが気にしないと、サンプルコードがうまくいくでしょう。
ありがとうございます!
バックグラウンドのスタッフを務めているサービスがあり、サービスが処理した結果を示すアクティビティを開始する必要があります。しかし、サービスが何度も開始される可能性があります。さて、私はこのアクティビティがすでにアクティブでない場合にのみ、このアクティビティを開始したいと思います。サービスでアクティビティが開始されているかどうかをチェック
これはどのような可能性と方法ですか?あなたが気にしないと、サンプルコードがうまくいくでしょう。
ありがとうございます!
androidManifest.xmlファイルで、アクティビティのlaunchMode
をsingleTask
に変更する必要があります。
このプロパティのデフォルト値はstandard
であり、任意の数のインスタンスを実行できます。
"singleTask"アクティビティと "singleInstance"アクティビティは、タスクを開始するだけです。それらは常にアクティビティスタックのルートにあります。さらに、デバイスは一度にアクティビティのインスタンスを1つだけ保持できます。そのようなタスクは1つだけです。 [single] "singleTask"アクティビティは、他のアクティビティをそのタスクの一部にすることを許可します。それは常にそのタスクの根源ですが、他のアクティビティ(必然的に "標準"と "シングルトップ"アクティビティ)をそのタスクに投入することができます。一方、 "singleInstance"アクティビティは、他のアクティビティをそのタスクの一部にすることを許可しません。これはタスクの唯一のアクティビティです。別のアクティビティを開始すると、FLAG_ACTIVITY_NEW_TASKがインテントにあるかのように、そのアクティビティが別のタスクに割り当てられます。
(引用符は同様にそこからである)より詳細な説明については
<activity android:name=".activity.YourActivity"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true"
android:clearTaskOnLaunch="false"
android:finishOnTaskLaunch="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
を
Android Developers' Guideをチェック