看我一波,Android获取进程名函数,代码优化到极致的操作!

本文详述了Android中获取进程名的多种方法,包括通过ActivityManager、Application.getProcessName()以及ActivityThread.currentProcessName(),并探讨了它们的优缺点和性能差异。作者提出了一种结合三种方法的优化方案,以更高效地获取进程名,并强调深入理解代码细节对开发者的重要性。
摘要由CSDN通过智能技术生成

建议收藏本文,你的项目一定用的到。

一、获取进程名的常规方法,通过ActivityManager

在多进程的APP中,常常需要知道当前进程是主进程还是后台进程?还是什么进程。

如下代码,是我们常见的一个用法,在进程启动时,根据进程名判断当前进程是哪个进程:

public class MyApp extends Application {
  private static final String TG = "MyApp";

  @Override
  public void onCreate() {
    super.onCreate();
    //判断当前进程是否为主进程,那么初始化主进程
    if (isMainProcess()) {
      initMainProcess();
    }
  }

  private boolean isMainProcess() {
    //获取当前进程名,并与主进程对比,来判断是否为主进程
    String processName = ProcessUtil.getCurrentProcessName(this);
    Log.e(TG, "isMainProcess processName=" + processName);
    return BuildConfig.APPLICATION_ID.equals(processName);
  }

  private void initMainProcess() {
    Log.e(TG, "initMainProcess");
  }
}

通过ActivityManager来获取进程名,网上也能搜索到很多人推荐这个用法。

但是,大叔要说,这个方法不是最优解。

/**
* 通过ActivityManager 获取进程名,需要IPC通信
*/
public static String getCurrentProcessNameByActivityManager(@NonNull Context context) {
  int pid = Process.myPid();
  ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
  if (am != null) {
    List<ActivityManager.RunningAppProcessInfo> runningAppList = am.getRunningAppProcesses();
    if (runningAppList != null) {
      for (ActivityManager.RunningAppProcessInfo processInfo : runningAppList) {
        if (processInfo.pid == pid) {
          return processInfo.processName;
        }
      }
    }
  }
  return null;
}

但是,大叔要说,这个方法不是最优解。

但是,大叔要说,这个方法不是最优解。

但是,大叔要说,这个方法不是最优解。

二、通过ActivityManager获取当前进程名的弊端

  1. ActivityManager.getRunningAppProcesses() 方法需要跨进程通信,效率不高

    需要 和 系统进程的 ActivityManagerService 通信。必然会导致该方法调用耗时。

  2. 拿到RunningAppProcessInfo的列表之后,还需要遍历一遍找到与当前进程的信息。

    显然额外的循环也会增加耗时;

    当然这个耗时影响很小。

  3. 最恐怖的是 ActivityManager.getRunningAppProcesses() 有可能调用失败

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值