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


猜你喜欢
- LinkedListLinkedList是一种可以在任何位置进行高效地插入和删除操作的有序序列。它的最基本存储结构是一个节点:每个节点将存储
- 1)1、1、2、3、5、8.......用递归算法求第30位数的值?首先我们能够发现从第3位数起后一位数等于前两位数值之和,即:x=(x-1
- SpringBoot项目中新增脱敏功能项目背景目前正在开发一个SpringBoot项目,此项目有Web端和微信小程序端。web端提供给工作人
- 本文主要研究的是关于Java中重载,重写,多态,静态绑定、动态绑定的相关内容,具体如下。重载,英文名是overload,是指在一个类中定义了
- 执行如下的jni调用:package jni;public class JNITransObject { public nativ
- 介绍Java中介者模式(Mediator Pattern)是一种行为设计模式,它可以降低多个对象之间的耦合性,通过一个中介者对象来协调这些对
- 微软Office Word本身已经提供了另存为PDF文档功能,对于少量文档,手工使用该方式进行Word转换为PDF尚可,一旦需要处理大量的文
- 掌握内存操作流输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteAr
- 前面两篇文章,分别简述了多线程的使用和发展历程,但是使用多线程无法避免的一个问题就是多线程安全。那什么是多线程安全?如何解决多线程安全?本文
- 不管eclipse有没有被被时代抛弃,反正是被我抛弃了,因为IDEA是真的好用现在公司的项目基本都是基于maven的多module项目,co
- 本文实例讲述了C# Windows API应用之基于FlashWindowEx实现窗口闪烁的方法。分享给大家供大家参考,具体如下:Windo
- 引言在实际应用场景中,我们封装一个学生的类,这个类用于封装学生的日常行为,如:上学、吃饭、上课等。然而,在疫情期间,学生上学时入校、吃饭时进
- 一、迭代key&value第一种方式:迭代entrySet1.方法一/** * entrySet集合for-each循环(
- GC简介何为GCGC(Garbage Collection)称之为垃圾回收,是对内存中的垃圾对象,采用一定的算法进行内存回收的一个动作。比方
- 处理提交数据1、提交的域名称和处理方法的参数名一致提交数据 : http://localhost:8080/hello?name=xiaoh
- 先看实例 代码如下 classip { privatestaticlongiptolong(stringstrip) //将127.0.0.
- 本文列举了我在周围同事的Java代码中看到的一些比较典型的错误。显然,静态代码分析(我们团队用的是qulice)不可能发现所有的问题,这也是
- 本问介绍了Collections工具类两种sort()方法,具体如下:一、Collections工具类两种sort()方法格式一: publ
- 本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下public class Demo {/**
- 原因如下: Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的