判断进程是否是主进程

函数定义

private fun isMainProcess(application: Application): Boolean {
    val pid = Process.myPid()
    val currentProcess = application.getSystemService(ActivityManager::class.java)
        ?.runningAppProcesses?.firstOrNull { it.pid == pid }
    return application.packageName == currentProcess?.processName
}

这段 Kotlin 代码定义了一个用于判断 当前进程是否是主进程(main process) 的函数 isMainProcess,在 Android 开发中非常常用,尤其是在多进程场景下,比如:某些初始化操作只在主进程中执行。

逐行解释

val pid = Process.myPid()

获取当前进程的 进程 ID(PID)

val currentProcess = application.getSystemService(ActivityManager::class.java)
    ?.runningAppProcesses?.firstOrNull { it.pid == pid }
  • 获取系统服务 ActivityManager;

  • 从 runningAppProcesses 中找到与当前 PID 匹配的 RunningAppProcessInfo 对象;

  • 这个对象中包含进程的名称、PID、UID 等信息。

    return application.packageName == currentProcess?.processName

  • 判断当前进程的 processName 是否和 application.packageName 一致;

  • 如果一致,说明当前是 主进程,返回 true;

  • 否则不是主进程,返回 false。

为什么需要这个判断?

Android 应用可能会运行在多个进程中(例如通过 android:process 指定了非默认进程),但是:

有些初始化代码(如 SDK 初始化、资源加载、服务注册)只应在主进程中执行,否则会造成冗余或异常。

举例:常见使用场景

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        if (isMainProcess(this)) {
            // 初始化 SDK、设置全局配置等操作
        }
    }
}

总结

这个 isMainProcess 函数:

  • 是多进程场景下判断是否处于主进程的常规写法;
  • 避免在非主进程中重复执行初始化逻辑;
  • 判断依据是:当前进程名是否与 applicationId 一致。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器