Android单应用开多进程与单进程跑多应用
一、Android应用多进程
正常情况下,一个apk启动后只会运行在一个进程中,其进程名为AndroidManifest.xml文件中指定的应用包名,所有的基本组件都会在这个进程中运行。但是如果需要将某些组件(如Service、Activity等)运行在单独的进程中,就需要用到Android:process属性了。我们可以为android的基础组件指定process属性来指定它们运行在指定进程中。多进程能突破单进程内存大小的控制,防止OOM。
对process属性的设置有两种形式: 第一种形式如android:process=":remote",以冒号开头,冒号后面的字符串原则上是可以随意指定的。如果我们的包名为“com.example.processtest”,则实际的进程名为“com.example.processtest:remote”。 这种设置形式表示该进程为当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。
第二种情况如 android:process="com.example.processtest.remote",以小写字母开头,表示运行在一个以这个名字命名的全局进程中,其他应用通过设置相同的ShareUID可以和它跑在同一个进程。
由于新开启进程,所以需注意下面两点:
1)Application的多次重建。
2)静态成员的失效。
//举例
...
<service
android:name=".MyService"
android:label="@string/title_activity_main"
android:process="xxx.service">
</service>
...
二、多应用程序跑同一进程
http://blog.csdn.net/dyllove98/article/details/8836412
http://blog.csdn.net/yanjianjunaaa/article/details/13095087
供参考
使用方法
1、首先在两个程序的Manifest文件中的manifest节点下面设置相同的sharedUserId,比如: android:sharedUserId="com.test"
2、在需要获取数据的程序中创建另外一个程序的上下文引用Context,
Context context = createPackageContext("com.excellence.weather", Context.CONTEXT_IGNORE_SECURITY);其中的第一个参数是另外一个程序的包名,这样就可以利用这个Context像访问自己程序的资源一样访问被共享的程序的资源,例如:
SharedPreferences sharedPreferences = context.getSharedPreferences(SHAREDPREFERENCES_USERINFO, Context.MODE_WORLD_READABLE);
3、导出成apk的时候使用相同的签名
ResourceId 共享方法
1、使用SharedPreferences传递
2、使用相同的资源名
三、获取应用程序开启进程个数及进程名
ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// 通过调用ActivityManager的getRunningAppProcesses()方法获得系统里所有正在运行的进程
List<ActivityManager.RunningAppProcessInfo> appProcessList = mActivityManager.getRunningAppProcesses();
ActivityManager.RunningAppProcessInfo类
说明: 封装了正在运行的进程信息
常用字段 :
int pid 进程ID
int uid 进程所在的用户ID
String processName 进程名,默认是包名或者由android:process=””属性指定
String [ ] pkgList 运行在该进程下的所有应用程序包名
List<ApplicationInfo> listAppcations = pm.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES);
Collections.sort(listAppcations,new ApplicationInfo.DisplayNameComparator(pm));// 排序
ApplicationInfo类
说明: 应用程序相关信息
常用字段方法 :
String packageName 应用名
String packageName 应用包名
String loadLabel() 获取应用标签
String loadIcon() 获取应用图标
获取当前运行的应用程序开启的进程列表:
1、获得系统里正在运行的所有进程
2、根据进程的pkgList列表里所有包名,在安装的应用目录下查询
3、根据查询到的应用,得到标签图标等
Android单应用开多进程与单进程跑多应用相关推荐
- python开多少进程合适_用了python多进程,我跑程序花费的时间缩短了4倍
应用场景:本人需要对200万条网页html格式数据进行清洗,提取文字后将分词结果写入数据库,之前做了一次,大概花费了80多个小时才跑完.机器配置是4核,内存8G:开完会领导让再改点东西重新跑一遍,然后 ...
- Android中高级进阶开发面试题冲刺合集(四)
以下主要针对往期收录的面试题进行一个分类归纳整理,方便大家统一回顾和参考.本篇是第四集~ 强调一下:因篇幅问题:文中只放部分内容,全部面试开发文档需要的可在公众号<Android苦做舟>获 ...
- Android版xx助手之天天酷跑外挂详细分析
Android版xx助手之天天酷跑外挂详细分析 图/文 莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也开 ...
- Android版xx助手之天天酷跑外挂具体分析
Android版xx助手之天天酷跑外挂具体分析 图/文 莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也開 ...
- python用多线程可以快几倍_用了python多进程,我跑程序花费的时间缩短了4倍
应用场景:本人需要对200万条网页html格式数据进行清洗,提取文字后将分词结果写入数据库,之前做了一次,大概花费了80多个小时才跑完.机器配置是4核,内存8G:开完会领导让再改点东西重新跑一遍,然后 ...
- Android中高级进阶开发面试题冲刺合集(七)
以下主要针对往期收录的面试题进行一个分类归纳整理,方便大家统一回顾和参考.本篇是第七集~ 强调一下:因篇幅问题:文中只放部分内容,全部面试开发文档需要的可在公众号<Android苦做舟>获 ...
- Android中设置组件多进程
MultiProcessComponent 源码地址 github源码下载地址https://github.com/onlynight/MultiProcessComponent 概述 这个demo中 ...
- android 首页6个碎片,Android 单帧碎片
Android 单帧碎片 单帧碎片:单帧碎片是为小屏幕设备所设计的,如手持设备(移动电话),Android 3.0 以上版本支持. 实例 该实例解释如何创建自己的碎片.这里我们创建两个碎片,其中一个被 ...
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
第一步.先制做一个有我们需要的图片资源的APK 如下图,这里有个about_log.png,我们需要生成apk文件. 生成的apk文件如果你不到项目的文件夹里面去取apk,想通过命令放到手机里面去可以 ...
最新文章
- 使用TensorFlow实现余弦距离/欧氏距离(Euclideandistance)以及Attention矩阵的计算
- shell脚本和linux命令,Linux shell脚本全面学习(一)
- github不支持html,为什么Github页面不允许我有效的HTML?
- 读书随笔:The Book of Why——CHAPTER 4~10
- linux各个版本下载地址,利用镜像服务器下载
- java版教材管理系统源码
- 前端知识点查文档网站
- 100名网工备考IE,最终能通过的,到底有几个?
- STM32F1的PWM占空比调节
- arm开发板与PC通讯及访问外网
- 小学校计算机教室年度工作总结,小学计算机教师年度工作总结
- [嵌入式]Cortex-A8处理器编程(上)
- shading interp;
- 什么是网络安全?网络安全包括哪几个方面?
- 矩阵压缩降维动态规划递推【P1719 最大加权矩形】
- json对象与json字符串互转,ajax各常见函数
- MIT博士推荐的几本数学书
- 最新红旗linux系统,红旗Linux操作系统
- 佳博Gprinter EVA G 打印机驱动
- XP停服务,卡巴当后盾——卡巴斯基反病毒软件2014(一年版)