android进程的初步认识

来源:互联网 发布:主营收入增长率源码 编辑:程序博客网 时间:2024/05/23 14:46
android进程的初步认识
android:process 属性在官网的解释:
默认情况下,同一应用的所有组件均在相同的进程中运行,且大多数应用都不会改变这一点。 但是,如果您发现需要控制某个组件所属的进程,则可在清单文件中执行此操作。
各类组件元素的清单文件条目—<activity>、<service>、<receiver> 和 <provider>—均支持 android:process 属性,此属性可以指定该组件应在哪个进程运行。您可以设置此属性,使每个组件均在各自的进程中运行,或者使一些组件共享一个进程,而其他组件则不共享。 此外,您还可以设置 android:process,使不同应用的组件在相同的进程中运行,但前提是这些应用共享相同的 Linux 用户 ID 并使用相同的证书进行签署。
此外, 元素还支持 android:process 属性,以设置适用于所有组件的默认值。
如果内存不足,而其他为用户提供更紧急服务的进程又需要内存时,Android 可能会决定在某一时刻关闭某一进程。在被终止进程中运行的应用组件也会随之销毁。 当这些组件需要再次运行时,系统将为它们重启进程。
决定终止哪个进程时,Android 系统将权衡它们对用户的相对重要程度。例如,相对于托管可见 Activity 的进程而言,它更有可能关闭托管屏幕上不再可见的 Activity 进程。 因此,是否终止某个进程的决定取决于该进程中所运行组件的状态。 下面,我们介绍决定终止进程所用的规则。
 
可以在四大组件中通过android:process这个属性给程序开一个新的进程,新进程的命名规范com.newprocess或者:com.newprocess,后者是私有的
因为创建了新的进程,相等与另一个应用程序,必然的会创建一个新的application,并调用onCreate方法。
获取进程的名称有三种方法:
1.context.getPackageName()//获取主进程的名称
2.getProcessName(getActivity(), android.os.Process.myPid())//获取当前进程的名称
public static String getProcessName(Context cxt, int pid) {
        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();
        if (runningApps == null) {
            return null;
        }
        for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
            if (procInfo.pid == pid) {
                return procInfo.processName;
            }
        }
        return null;
    }
3. public static String getProcessName() {//获取当前进程的名称
        try {
            File file = new File("/proc/" + android.os.Process.myPid() + "/" + "cmdline");
            BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
            String processName = mBufferedReader.readLine().trim();
            mBufferedReader.close();
            return processName;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

在application的oncreate的方法中判断主进程的名称与当前进程名称是否相同来执行不同的操作,就可以避免重复调用oncreate的逻辑了
0 0
原创粉丝点击