不在最近任务栏中显示

2017-09-12  本文已影响122人  44e46f384a16

在实际开发中,我们希望某些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

/**

    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。

上一篇下一篇

猜你喜欢

热点阅读