Android多进程

多进程:

为何开启Android应用要开启多进程,主要有以下几点:

1.单进程所分配的内存不够,需要更多的内存。在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的硬件的提升和android系统的改进,虽然可分配内存越来越多,但仍旧可以通过开启多进程来获取更多的内存来处理自己App的业务

2.独立运行的组件,比如个推,它的服务会另开一个进程。

3.运行一些”不可见人”的操作,比如获取用户的隐私数据,比如双守护进程来防止被用户杀掉

android系统与所有的系统一样都需要IPC机制去进行进程间的通信。首先我们应该先了解线程,线程是cpu最小的执行单元,同时线程是一种有限的资源,进程是一个执行单元,一个进程中可以含有多个线程。他们相互协同合作完成任务。例如:在Android中启动一个应用就会创建一个进程,进程中有一个主线程MainThread即UI线程,只有在UI线程中才能操作UI即更新UI。但是很多时候一个进程需要执行大量的耗时任务,如果任务放在主线程中就会造成程序ANR(Application No Responding)。这就是为什么一般我们都会创建一个子线程来处理耗时任务而在主线程(UI线程)更新UI。这样就会避免ANR。 Android是基于linux内核的移动操作系统,android有自己的进程间的通信方式,例如:Binder,Scoket等。android的多进程模式,一般我们可以通过android:process属性就可以开启多进程。但是这里面若应用不当会产生诸多问题。一般android默认的进程名是包名。 android系统(与linux一样)会为每一个应用创建一个UID,具有相同的UID才能运行到一个进程共享数据,在android里面我们可以通过设置shareUID在一个进程中运行。但是使用shareUID是有条件的。

  1.    两个应用具有相同的UID
  2.    必须具有相同的签名

代码:

这里通过process这个属性将service的进程名指定为图中所示的进程,这就开启了另一个进程。

那么,想要在进程间进行通信,就得用到Messenger和AIDL,其中Messenger用于多进程单线程,AIDL则用于更复杂的多进程多线程,实际上,Messenger也是通过AIDL的方式实现的,具体可以查阅官方文档,有较详细的介绍。

用Messenger发出message,在另一个进程中通过Handler就能对收到的消息做出处理,实现不同进程间的通信。

AIDL的一些方法可自行查阅。

2.Notification及前台服务:

Notification,通知栏大家肯定都很熟悉了,这里注意setLatesEventInfo方法已经弃用了,最好用Builder来设置它的标题以及

内容,通过获取系统service来得到NotificationManager.调用notify这个方法将notification显示在通知栏中。

通过PendingIntent来指定点击通知的意图。

通过一个demo来深入理解和掌握:

还没更完。学的慢人懒。。。掌握了继续更新。

results matching ""

    No results matching ""