excludeFromRecents
属性を使う
アクティビティがRecent Appsに表示されないようにするには、activity
要素のexcludeFromRecents
属性にtrue
を設定します。※デフォルトはfalse
です。
そのアクティビティをrootに持つアクティビティスタックはRecent Appsに残らなくなります。
<activity
android:excludeFromRecents="true"
...他の属性....
>
注意点
noHistory
属性とは異なる
noHistory
属性やFLAG_ACTIVITY_NO_HISTORY
は、特定のアクティビティをアクティビティスタックに残すかどうかの設定です。
Recent Appsに残すかどうかを指定するexcludeFromRecents
属性とは別です。
-
noHistory
属性: 指定されたアクティビティをアクティビティスタックに残さない。 -
excludeFromRecents
属性: 指定されたアクティビティをrootに持つアクティビティスタックをRecent Appsに残さない。
アプリがforegroundの時にはRecent Appsに表示される
excludeFromRecents
属性にtrue
を設定していても、そのアクティビティスタックがforegroundにある状態ではRecent Appsに表示されます。
excludeFromRecents
属性は、どうやら「アクティビティスタックを閉じた後にRecent Appsに残さない」というものだからです。
ただし、Android 4.1以前ではRecent Appsの振る舞いが異なり、foregroundのものは表示されないようになっています。
他のアプリを起動する
他のアプリのアクティビティを開いたとしても、同じアクティビティスタックに積まれていたらRecent Appsには残りません。
インテントにFLAG_ACTIVITY_NEW_TASK
を設定すれば解決できます。
Intent intent = new Intent(...); // 他のアプリを開くような暗黙のintent
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
その他
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
というのもあるけど、こちらは調べていません。
ドキュメントにも詳細が書かれていないし、excludeFromRecents
属性の実装のため存在しているだけで、使い所は無いような気がしています。