Android获取进程名

由于项目中涉及到多进程的原因,需要判断当前所属的进程,因此需要获取进程名,在网上搜罗了好多种获取进程名的方法,试了一下有以下两种能够正确获取当前进程的进程名:

  • 利用Linux系统获取进程名
 public static String getCurrentProcessName() {
        FileInputStream in = null;
        try {
            String fn = "/proc/self/cmdline";
            in = new FileInputStream(fn);
            byte[] buffer = new byte[256];
            int len = 0;
            int b;
            while ((b = in.read()) > 0 && len < buffer.length) {
                buffer[len++] = (byte) b;
            }
            if (len > 0) {
                String s = new String(buffer, 0, len, "UTF-8");
                return s;
            }
        } catch (Throwable e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
  • 利用Android系统获取进程名
   public static String getProcessName(Context cxt) {
        int pid = android.os.Process.myPid();
        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
        if (runningApps == null) {
            return null;
        }
        for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
            if (procInfo.pid == pid) {
                return procInfo.processName;
            }
        }
        return null;
    }

以上这两种方法能够正确获取当前进程名,还有一种通过反射获取进程名的方法,我试了一下,没有成功获取进程名。

   public static String getProcessName(Context cxt) {
        int pid = android.os.Process.myPid();
        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
        if (runningApps == null) {
            return null;
        }
        for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
            if (procInfo.pid == pid) {
                return procInfo.processName;
            }
        }
        return null;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,623评论 0 23
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 10,874评论 1 22
  • 枕烟庭者,盖特峰秀起,意若枕烟。秘庭凝霛(灵),窈如仙会,即扬雄所谓爰清爰静游神之庭是也。可以超绝世纷,永洁精神。...
    墨影teresa阅读 4,302评论 3 15
  • NoSQL类型数据库学习 redis安装和启动方式 在linux环境下redis学习,首先就是安装redis然后修...
    狗语阅读 1,573评论 0 0
  • 很多家长比较好奇我是怎样和孩子沟通的,以后有机会就记录一些。有兴趣就看看吧,比较口水话和流水帐。。。 早晨,带孩子...
    冬晓月光阅读 4,318评论 0 0