一般情况下,一个应用开启一个进程,application会被执行一次,如果涉及多开进程,那情况就不同了,application就会被执行多次,下面笔者根据这问题对应用开启多进程的进行分析:

android:process

说到Android进程,我们就得了解android:process这个属性,这个属性有什么作用?我们就来看看:
在Android的帮助文档中我们可以了解到,一般情况下一个服务没有自己独立的进程,它一般是作为一个线程运行于它所在的应用的进程中。但是也有例外,Android声明文件中的android:process属性却可以为任意组件包括应用指定进程,换句话说,通过在声明文件中设置android:process属性,我们可以让组件(例如Activity, Service等)和应用(Application)创建并运行于我们指定的进程中。
举个例子:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.soubw.prodemo" >//包名<activity android:name=".LoginActivity"    android:process=":login"/>//为activity开启一个进程

上面就是为登录的Activity开启一个叫login进程,只不过这个进程是在以应用默认的包名下开启的进程,叫com.soubw.prodemo:login,在属性中值为什么以冒号开头呢,因为’:’这个前缀将把这个名字附加到你的包所运行的标准进程名字的后面作为新的进程名称(只不过这个login进程为该应用私用,其他应用不能共享),上面的例子很好的讲述这点。

还有一种是不以冒号开头而以小写字母开头,我们也举个例子来说明:

<activity android:name=".RegisterActivity"    android:process="com.wxj.register"/>//为activity开启一个不同于应用包名的进程

这个进程将以com.wxj.register这个名字命名的运行于全局的进程中(该进程就可以让不同应用中的各种组件可以共享一个进程)。

解决多进程次执行多次onCreate()

如果应用中采用多进程方式,oncreate方法会执行多次,根据不同的进程名字进行不同的初始化。应用判断进程名字进行单独初始化,这要就可以利用进程名根据具体需求,应该加载哪些资源,执行哪些具体逻辑了。

    @Override    public void onCreate() {        super.onCreate();        String processName = getProcessName(this);        if (processName!= null) {            if(processName.equals("com.soubw.prodemo")){                //初始化com.soubw.prodemo以包名为进程名,项目默认的进程            } else if(processName.equals("com.soubw.prodemo:login")){                //初始化com.soubw.prodemo:login            }else if(processName.equals("com.wxj.register")){                //初始化com.wxj.register            }else{            }        }    }    private String getProcessName(Context context) {        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        List<ActivityManager.RunningAppProcessInfo> runningApps = am.getRunningAppProcesses();        if (runningApps == null) {            return null;        }        for (ActivityManager.RunningAppProcessInfo proInfo : runningApps) {            if (proInfo.pid == android.os.Process.myPid()) {                if (proInfo.processName != null) {                    return proInfo.processName;                }            }        }        return null;    }

以上如果有错误之处或者需要指导帮忙,可以留言或者加Q群:313870489

参考文章地址

更多相关文章

  1. android 系统结构
  2. Android缺乏整体控制或成发展障碍
  3. android模拟打电话的应用小程序
  4. Android新手入门 FAQ
  5. android系统体系结构
  6. Android应用于军事制造业,开放性优势受青睐
  7. Android(安卓)的网络编程
  8. android系统体系结构
  9. Android中常见Intent习惯用法-上篇(附源码下载)

随机推荐

  1. Android HAL实例解析
  2. Android基础篇——创建一个Android工程
  3. Android监控软键盘变化实例
  4. 【Android】【绘图】绘制波浪线动画
  5. WPF UI组件学习(一) - Window的外观实现
  6. android 判断APP是否第一次打开
  7. android两款gridview美化
  8. Android中dp、sp、px、pt之间的换算关系
  9. Android 之 Dialog复选框获取值
  10. Android聊天室(源码)