Android 多进程资料总结
作者:白一辰 发布时间:2021-09-06 14:04:41
温故而知新
网上说多进程的文章很多,不过基本都是在讨论很深的东西,这是需要去专研的,而我是来这篇是用来偷懒的(应用层次),记录的都是自己对多进程的理解,方便以后用到的时候来偷懒,如果有错,请指教,小小程序员万分感谢。
讲进程,先来回答下面几个问题:
1.什么是线程?
线程就是程序中单独执行的流控制。
2.什么是多线程?
多线程就是单个程序中执行多个流控制。作用就是最大限度的使用CPU资源。
3.什么是进程?
一般指的是一个执行单元,即一个应用程序(Android中就是一个应用)。
4.线程和进程的关系?
一个进程可以有多个线程,进程与线程是包含与被包含的关系。
5.为什么要用多进程?
1.单进程所分配的内存不够,需要更多的内存。
2.需要运行一个独立的组件。
3.干一些不可见人的勾当,比如(
A-> 心跳 ->B,如果B没启动,就启动B。
B-> 心跳 ->A,如果A没启动,就启动A。
简单说就是双守护进程来防止被用户杀掉。)
6.怎么开启多进程?
AndroidManifest.xml中设置android:process=":remote"
<service
android:name=".remoteService"
android:label="@string/app_name"
android:process=":remote"/>
Activity中启动这个服务
Intent mIntent = new Intent(this, remoteService.class);
startService(mIntent);
7.":remote"中,冒号是个什么鬼?
它不是鬼,android:process表示这个组件跑在什么鬼进程里,就是进程名。用:的意思是表示这是这个进程对于启动它的应用来说是私有的。类似于我们注册Activity省略包名一样。如果我们的包名是com.example.whitelaning,那这个 android:process=":remote"的进程的名字就是"com.example.whitelaning:remote"。
8.私有进程和全局进程有什么区别?
我也想知道%>_<%有人知道请指教
夜雨寄北大大回复是,e带:的表示是当前应用的私有进程,其他应用的组件不可以跟它跑在同一个进程里面,而对于全局进程,其他应用可以通过shareUID来跟它处于同一个进程里面具有相同Uid的应用可以共享数据,可以互相访问对方的私有数据(主席的书在多进程那一节里面有讲解)
9.多进程有什么要注意的?
1.每次开启多进程,Application都会重新执行一遍,所以如果你在Application做了很多初始化的工作,那就需要判断是哪个进程启动的Application了。
方法:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
int pid = android.os.Process.myPid();
String processNameString = "";
ActivityManager mActivityManager = (ActivityManager)this.getSystemService(getApplicationContext().ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo appProcess : mActivityManager.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
processNameString = appProcess.processName;
}
}
if("com.example.whitelaning".equals(processNameString)){
//do Something
} else {
//do Something
}
}
}
2.多进程会使单例模式失效,因为两个线程的内存是隔离的。
10.还有什么要知道的?
去看源码吧,你会死去活来的,如果看完还没死,请告诉我私有进程和全局进程的区别吧,我会献上我一年份的膝盖的~
通过此文希望能对Android多线程的资料掌握,谢谢大家对本站的支持!
来源:http://www.jianshu.com/p/6d8f208c96cd
猜你喜欢
- 一、WebSocket简介WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能。在WebSocket应
- Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,它是一种基于64个可打印字
- 首先请看如下代码:public class generictype { public static void main(String str
- Eureka什么是服务治理为什么需要服务治理?  服务治理是主要针对分布式服务框架的微服务,处理服务调用
- 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用对应的方法,从而让RecyclerView重新绘制页面本次也
- 之前在项目中会用到在Java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,
- Spring Boot 最主要的特性就是AutoConfig(自动配置),而对于我们这些使用者来说也就是各种starter,Spring B
- 一、select是什么select——>用于选择更快的结果。基于场景理解比如客户端要查询一个商
- 什么是XML?XML:可扩展标记语言。XML的作用:纯文本,兼容性强。和HTML的区别:xml: 主要用来处理、存储数据。无规定标签,可扩展
- DAO模式是接口的一个典型应用。1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同
- 有时候你希望在一个嵌套循环的外层循环中执行Continue操作。例如,假设你有一连串的标准,和一堆items。并且你希望找到一个符合每个标准
- 1 pom.xml文件注:热部署功能spring-boot-1.3开始有的<!--添加依赖--><dependency&g
- 各个方法1. 得到class的成员变量首先得到object的class对象然后在class对象中用getDeclaredFields()方法
- 1.添加引用工具箱---右键---选择项--COM组件--Adobe PDF Reader2.使用方法OpenFileDialog open
- 为了能正常输出XML格式的内容,必须要对不被XML允许的那些特殊字符进行转换。本文介绍的正是如何使用C#判断XML字符串是否含特殊字符并进行
- 旧的设计方案开发api的时候,需要先定义好接口的数据响应结果.如下是一个很简单直接的Controller实现方法及响应结果定义.@RestC
- 这篇文章主要介绍了如何使用SpEL表达式实现动态分表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 并发编程中的三个概念:1.原子性在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执
- 本文实例为大家分享了Android创建自定义样式圆角dialog对话框的具体代码,供大家参考,具体内容如下效果如上,圆角对话框,标题和正文都
- 本文实例讲述了Java对象数组定义与用法。分享给大家供大家参考,具体如下:所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中