美文网首页Android探索
关于多进程的探索

关于多进程的探索

作者: 清明捉鬼 | 来源:发表于2018-05-31 19:03 被阅读3次
    前言

    其实很久之前就又知道多进程这种方式,因为在我理解中OOM的最终解决方案就是使用此种方式,再加上之前就了解到插件化思想, 更加坚信多进程是中大型应用必走之路,其开启方式也无非是在清单文件中利用progress配置及使用c代码fork一个进程,fork做法一般用于保活功能,不过去年被项目所逼花了时间研究保活,整理了不少资料,得出一个结论对于现在的手机 ,保活功能就是一个伪命题,这种一般框架命名为含有Daemon的Service

    多进程是个啥?

    个人理解图

    无标题.png
    私有进程的完整名称为默认主进程名称+配置名称,例:主进程名为:www.biabia.club,则私有进程名为www.biabia.club:jiaoBaBa
    此处sharedUserId后两个App的进程如何运行处理没做探究,但是其数据可以共享,据说这样可以共享虚拟机,共享方式暂未探索,但是共享uid的几个App必须使用相同签名方可奏效。
    多进程应用场景

    1.模块化时几个组件间数据隔离,或者模块化时扩大应用内存 ,适用于组件化思想开发
    2.给WebView和图片加载控件保驾护航,使其拥有充足内存,且一处崩溃不影响整个App运行。
    3进程皆有5个优先级,可以加以利用,譬如音乐播放案例,可以开启一前台Service并将此Service指定一公有进程运行

    多进程使用问题

    1.Application多次初始化,可以在onCreate判断其主进程name进行过滤的初始化某些东西
    法1:

    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;
        }
    

    法2:

        public static String getProcessName2() {
            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;
            }
        }
    

    2.静态变量等数据完全隔离:
    今日在使用中访问静态变量,在A Activity做出改变,但在B Activity获取时发现获取的扔是初始值,突然想起可能是IPC隔离,IPC通信这里都是老生常谈,虽说传值方式很多,但便捷性还有待进一步探索。
    3.单Activity指定进程,启动与杀死即为进程启动与结束,表现为Application在启动时仍旧会重启
    待探究:同App便捷IPC通信;多组件同进程进程状况及多组件之间的数据共享状况;共享uid进程处理方式及共享虚拟机概念是什么;跳转Activity无权限原因。

    参考:
    https://blog.csdn.net/aj758461601/article/details/24361347
    https://blog.csdn.net/coding_glacier/article/details/8230159
    https://blog.csdn.net/yuanlong_zheng/article/details/7338276
    http://blog.spinytech.com/2016/11/17/android_multiple_process_usage_scenario/
    https://developer.android.com/reference/android/os/Process

    相关文章

      网友评论

        本文标题:关于多进程的探索

        本文链接:https://www.haomeiwen.com/subject/cgfcsftx.html