微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检测您是否在Android上的Application中的主进程或远程服务进程中

我有一个应用程序,它在一个单独的进程中运行远程服务:

<service android:name=".MyService" android:process=":remote"/>

我也在使用Application类:

<application android:label="@string/app_name" android:name=".MyApplication" ...

我可以这样做吗?

public class MyApplication extends Application {

    public MyApplication() {
        if (isRemoteService()) {
            setupLog("remoteservice.log");
        } else {
            setupLog("application.log");
        }
    }

我想我可以获取进程名称并使用它来检测我是否在远程服务或主应用程序中,但我还没有找到如何获取进程名称.我可以从android.os.Process.myPID()获取PID,但这对我没什么帮助.

解决方法:

例如,如果要检查是否在主进程中,可以在应用程序中编写代码,如下所示:

public class MyApplication extends Application {
@Override
public void onCreate() {
    //...code here will be execute in every process...
    if (isMainProcess()) {
        //...code here will be execute only in main process
    }
    super.onCreate();
}

// your package name is the same with your main process name
private boolean isMainProcess() {
    return getPackageName().equals(getProcessName());
}

// you can use this method to get current process name, you will get
// name like "com.package.name"(main process name) or "com.package.name:remote"
private String getProcessName() {
    int mypid = android.os.Process.myPid();
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> infos = manager.getRunningAppProcesses();
    for(RunningAppProcessInfo info : infos) {
        if (info.pid == mypid) {
            return info.processName;
        }
    }
    // may never return null
    return null;
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐