获取所有正在运行的进程信息

8

我有一个想法,要制作一款适用于安卓系统的任务管理器。有人能告诉我如何获取当前在安卓系统中正在运行的所有进程吗?


你不能直接管理正在运行的进程,但是你可以通过读取ps命令的输出来获取所有正在运行的进程。如果需要管理这些进程,你只能通过执行已经存在的其他程序来实现。 - user207421
这个问题可能是 https://dev59.com/MXA75IYBdhLWcg3weY5f 的重复。 - Boopathi
1个回答

12

使用以下代码可以获取正在运行的进程列表:

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

for(RunningAppProcessInfo runningProInfo:procInfos){

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

了解更多信息,请访问此链接。

要根据包名获取应用程序名称,请使用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 "";
}

最后,要检查一个应用是否为系统应用,请使用:

PackageManager pm = context.getPackageManager();

boolean isSystemApp = ((applicationInfo.flags &= ApplicationInfo.FLAG_SYSTEM) != 0);

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

清单中需要提及哪些权限? - Zaid Iqbal
@zaidiqbal android.permission.GET_TASKS @zaidiqbal android.permission.GET_TASKS - Amit Anand
1
@zaidiqbal请查看这个答案 - Amit Anand
3
getRunningAppProcesses() 返回正在设备上运行的应用程序进程列表,而 getRecentTasks(int maxNum, int flags) 返回用户最近启动的任务列表,最新的任务排在前面,之后按顺序依次是较旧的任务。这里的 maxNum 是返回列表中条目的最大数量。实际返回的数量可能更少,这取决于用户启动了多少个任务和系统可以记住的最大数量。 - Amit Anand
3
请注意,从API 29开始,常规应用程序无法访问其他进程的列表。 - Alex Cohn
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接