由于项目需要,很多时候使用新进程来运行服务等类似的需要,一般常用android:process=":newProcess"的方法。但是在android每新启动一个进程都需要重新加载Application的onCreate方法。我们就需要在onCreate里区分进程的名称来进行有选择性的加载一些资源。但是使用普通的context.getApplicationInfo.processName的方法都只能得到包名,无法区分同个包的进程。这里介绍一种其他可用的方法。
public String getProcessName(Context context) {
String process = null;
if (context != null) {
int pid = android.os.Process.myPid();
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> infoList = null;
try {
infoList = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo apps : infoList) {
if (apps.pid == pid) {
process = apps.processName;
}
}
} catch (SecurityException e) {
// 进程可能不具备获取 getRunningAppProcesses 权限
e.printStackTrace();
}
}
return process ;