【问题标题】:Get info about all running processes [closed]获取有关所有正在运行的进程的信息 [关闭]
【发布时间】:2014-09-08 10:17:45
【问题描述】:

我有一个想法为android 制作任务管理器。谁能告诉我如何在android 中获取所有当前正在运行的进程

【问题讨论】:

  • 你不能。您可以通过读取ps, 的输出来获取所有正在运行的进程,但您无法管理它们,除非通过执行其他已经存在的程序。
  • 这个问题的可能重复是*.com/questions/3278895/…

标签: java android taskmanager


【解决方案1】:

使用下面的代码可以得到正在运行的进程列表:-

ActivityManager actvityManager = (ActivityManager)
this.getSystemService( ACTIVITY_SERVICE );
List<RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();

for(RunningAppProcessInfo runningProInfo:procInfos){

        Log.d("Running Processes", "()()"+runningProInfo.processName);
}

更多信息您可以访问this link.

要根据包名称获取应用程序名称,请使用 PackageManager 类。

final PackageManager pkgmgr = getApplicationContext().getPackageManager();
ApplicationInfo appinfo;
try {
    appinfo = pkgmgr.getApplicationInfo( this.getPackageName(), 0);
} catch (final NameNotFoundException e) {
    appinfo = null;
}
final String applicationName = (String) (appinfo != null ? pkgmgr.getApplicationLabel(appinfo) : "(unknown)");

根据 PID 获取应用名称:-

public static String getAppNameByPID(Context context, int pid){
    ActivityManager manager 
               = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

    for(RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()){
        if(processInfo.pid == pid){
            return processInfo.processName;
        }
    }
    return "";
}

最后检查应用是否为系统应用:-

private boolean isSystemPackage(PackageInfo pkgInfo) {
        return (pkgInfo.applicationInfo.flags & 
                ApplicationInfo.FLAG_SYSTEM) != 0;
    }

【讨论】:

  • 在清单中提及的任何权限?
  • @zaidiqbal android.permission.GET_TASKS
  • @zaidiqbal 然后请结帐this answer
  • getRunningAppProcesses() 返回设备上正在运行的应用程序进程列表,而getRecentTasks(int maxNum, int flags) 返回用户最近启动的任务列表,最近的是第一个任务,之后是较旧的任务为了。这里maxNum是列表中返回的最大条目数。返回的实际数量可能会更小,具体取决于用户启动了多少任务以及系统可以记住的最大数量。
  • 请注意,从 API 29 开始,常规应用无法访问其他进程的列表。