Android

Recent Appsに残らないActivityを作る

More than 3 years have passed since last update.

excludeFromRecents属性を使う

アクティビティがRecent Appsに表示されないようにするには、activity要素のexcludeFromRecents属性にtrueを設定します。※デフォルトはfalseです。
そのアクティビティをrootに持つアクティビティスタックはRecent Appsに残らなくなります。

AndroidManifest.xml
<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を設定すれば解決できます。

ExampleActivity.java
Intent intent = new Intent(...); // 他のアプリを開くような暗黙のintent
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

その他

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTSというのもあるけど、こちらは調べていません。
ドキュメントにも詳細が書かれていないし、excludeFromRecents属性の実装のため存在しているだけで、使い所は無いような気がしています。