【问题标题】:Close all recent open/running apps at once button-android一次关闭所有最近打开/运行的应用程序按钮-android
【发布时间】:2016-04-20 22:08:34
【问题描述】:

我想一次关闭所有最近的应用程序。我找到了以下代码,但它只显示最近的应用程序。我想关闭所有这些最近的应用程序。

显示所有最近的应用列表代码:(但我不想列出我需要关闭所有最近的应用)

Class serviceManagerClass = Class.forName("android.os.ServiceManager");
Method getService = serviceManagerClass.getMethod("getService", String.class);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar");
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor());
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder });
Method clearAll = statusBarClass.getMethod("toggleRecentApps");
clearAll.setAccessible(true);
clearAll.invoke(statusBarObject);
Toast.makeText(getApplicationContext(), "All recent app closed....", Toast.LENGTH_LONG).show();

【问题讨论】:

标签: android android-layout android-intent android-activity


【解决方案1】:

不,即使使用Process.killProcess() 方法,也无法从“最近的应用程序”列表中删除并删除用户最近的应用程序。 阅读这两个答案:
- Kill another application on Android?
- How to kill currently running task in android

但是,您可以做的是重新启动最近应用的后台进程(这是大多数来自 Google Play 的 TaskKillers 实际上所做的):

  • KILL_BACKGROUND_PROCESSES 用户权限添加到您的清单中:

    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
    
  • 然后killBackgroundProcesses(以前称为restartPackage)用于您想要“杀死”的进程(即使它不是真正的杀死)

    ActivityManager actvityManager = (ActivityManager)
            this.getSystemService( ACTIVITY_SERVICE );
    List<ActivityManager.RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();
    for(ActivityManager.RunningAppProcessInfo runningProInfo:procInfos){
        if (runningProInfo.processName.equals("PACKAGE_NAME_YOU_WANT_TO_KILL")) {
            actvityManager.killBackgroundProcesses(runningProInfo.processName);
        }
    }
    

因此,“被杀死”的应用程序不再出现在正在运行的进程列表中,它们会从内存中删除。应用程序仍然在最近的应用程序列表中,您无法对其进行任何操作 - 请参阅答案 clear all recent task Programmaticcally

希望对你有帮助。

【讨论】:

  • 什么是“PACKAGE_NAME_YOU_WANT_TO_KILL”我认为它应该procInfos.Name你的想法?而且我认为它只会杀死正在运行的应用程序我想清除所有显示在最近历史列表中的应用程序显示在“主页”按钮长按
  • @sms247 例如,com.android.chrome(即 processName 实际上等于应用程序的包),一旦您想停止 Chrome 浏览器。要获取仅最近运行的应用程序列表 - 使用 getRunningTasks (stackoverflow.com/questions/6870487/…)。但同样,它们不会从最近的应用列表中删除(除非您是设备制造商)
【解决方案2】:

退出应用程序是 Android 操作系统的工作。考虑您要退出所有最近的应用程序的原因。如果所有最近的应用程序都没有正确编写,就 Android OS 应用程序开发模型而言,并且它们行为不端,那么它们应该被卸载或修复。

这是一个关于这个主题的精彩 wiki:

Is quitting an application frowned upon?

【讨论】:

  • 我知道这是不可能的,但我知道如果我得到的代码将返回所有进程 ID 然后我在 forloop 中使用这一行 Process.killProcess(Process.myPid()) 所以杀死所有应用程序,但我我不确定它是否也会从最近的应用列表中清除
  • 我不确定我的答案对你来说是否清楚,所以让我在这里再试一次:不要杀死这样的应用程序。
【解决方案3】:


首先是让所有活动都按照 Konstantin Loginov 所说的那样运行,而不是像写上它的名字那样让它被杀死。如果检查还包括验证您最近的应用程序下列出的进程名称(如果它们在您正在运行的进程中),则可能会更好。

之后,删除您最近使用的应用下的列表。你可能想看看这个thread

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多