在实际开发中,我们希望某些activity或者应用程序不在多任务列表中显示,即长按Home键或者多任务button键不显示近期执行的程序,我们能够在对应应用程序的AndroidManifest.xml文件里的activity标签中加入例如以下属性:
android:excludeFromRecents="true"
比方不须要xxxActivity显示在多任务列表中:
[code] <activity
android:name="xxxActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
++ android:excludeFromRecents="true"
android:theme="@style/AppActivityTheme" >
方法一
设置启动的flags
/**
- If set, the new activity is not kept in the list of recently launched
- activities.
*/
public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 0x00800000;
Intent intent = new Intent(this, WaitingFallBackDialog.class);
intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
方法二
AndroidManifest.xml中activity标签下加android:excludeFromRecents =“true”即可。
方法三
这个其实是方法一的延伸,以及对现状的改善。对于别人已经发布的应用,我们没有办法改变其内部行为。如果不想自己打开的应用出现在最近应用列表中的话,可以自己做一个app来启动那些应用,intent指定flag:
intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
在系统源码中修改
android4.4\frameworks\base\packages\SystemUI\src\com\android\systemui\recent\RecentsActivity.java
此函数是打开最近应用点击空闲地方跳转
public void dismissAndGoHome() {
if (mRecentsPanel != null) {
Intent homeIntent = new Intent(Intent.ACTION_MAIN, null);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
startActivityAsUser(homeIntent, new UserHandle(UserHandle.USER_CURRENT));//这里是跳转到系统最高Launch 里面
}
}
android4.4\frameworks\base\packages\SystemUI\src\com\android\systemui\recent\RecentTasksLoader.java
//关键代码
// Don't load the current home activity.
if (isCurrentHomeActivity(intent.getComponent(), homeInfo)) {//这里是屏蔽了系统最高launch 不记录在最近应用的栈中
continue;
}
// 手动增加需要的包名
if (intent.getComponent().getPackageName().equals(“要屏蔽的包名”)) {
continue;
}
// Don't load ourselves
if (intent.getComponent().getPackageName().equals(mContext.getPackageName())) {
continue;
}
设置 android:noHistory="true"后,该Activity在statck中不留历史痕迹。默认的值是false。