确定由哪个进程调用Application.onCreate()

use*_*482 5 android android-service

在我的应用程序中,我有本地服务,它需要在单独的进程中运行。它被指定为

<service android:name=".MyService" android:process=":myservice"></service>
Run Code Online (Sandbox Code Playgroud)

在 AndroidManifest.xml 中。我还对 Application 对象进行子类化,并希望在其 onCreate 方法中检测何时由普通启动调用以及何时由 myservice 启动调用。我找到的唯一可行的解​​决方案是由

/sf/answers/2023494091/

但我不想获取设备上所有正在运行的进程并迭代它们。我尝试使用 Context 中的 getApplicationInfo().processName ,但不幸的是它总是返回相同的字符串,而上面链接中的解决方案返回:myPackage,myPackage:myservice。我首先不需要 processName,但需要一些好的解决方案来确定何时由普通启动调用 onCreate 方法以及何时由 myservice 启动调用。也许可以通过在某处应用某种标签或标签来完成,但我没有找到如何做到这一点。

Dav*_*ser 2

您可以使用此代码来获取进程名称:

    int myPid = android.os.Process.myPid(); // Get my Process ID
    InputStreamReader reader = null;
    try {
        reader = new InputStreamReader(
                new FileInputStream("/proc/" + myPid + "/cmdline"));
        StringBuilder processName = new StringBuilder();
        int c;
        while ((c = reader.read()) > 0) {
            processName.append((char) c);
        }
        // processName.toString() is my process name!
        Log.v("XXX", "My process name is: " + processName.toString());
    } catch (Exception e) {
        // ignore
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (Exception e) {
                // Ignore
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)