Android中的多进程与多线程

Android中的多进程与多线程

概述

当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程)中运行。 如果某个应用组件启动且该应用已存在进程(因为存在该应用的其他组件),则该组件会在此进程内启动并使用相同的执行线程。 但是,您可以安排应用中的其他组件在单独的进程中运行,并为任何进程创建额外的线程。

多进程

UID和PID

每一个应用有一个UID,相当于Linux中的一个用户。每一个PID可以对应多个PID(进程号)。正常情况下,每一个应用都运行在自己的用户空间中,不能访问其他应用的数据。

一个应用含多个进程

在一个APP中开启多个进程,可以通过在Androidmanifest中相应的组件中添加Android:preocess属性,如果以:开头,那么这个进程就是应用的私有进程,如果不,那么其他应用可以设置sharedUserID跑在这个进程中。

影响
  • 全局变量和单例模式失效
  • 创建多个Application
  • 线程同步机制完全失效

多个应用跑在同一进程

在自己开发的系统中,可以让系统组件跑在系统进程中以获得相应权限

实现

满足以下两个条件的应用可以跑在同一进程,这样就可以互相访问数据了。
1. Androidmanifest文件根标签下的sharedUserId相同
2. 签名相同

多线程

UI线程

应用启动时,系统会为应用创建一个名为“主线程”的执行线程。 此线程非常重要,因为它负责将事件分派给相应的用户界面小部件,其中包括绘图事件。 此外,它也是应用与 Android UI 工具包组件(来自 android.widget 和 android.view 软件包的组件)进行交互的线程。因此,主线程有时也称为 UI 线程。
系统不会为每个组件实例创建单独的线程。运行于同一进程的所有组件均在 UI 线程中实例化,并且对每个组件的系统调用均由该线程进行分派。 因此,响应系统回调的方法(例如,报告用户操作的 onKeyDown() 或生命周期回调方法)始终在进程的 UI 线程中运行。

不要阻塞UI线程

因为主线程负责UI的更新与管理,如果耗时操作不在子线程中处理,会让UI线程阻塞并且出现ANR。

进程间通信

Android系统中应用程序之间不能共享内存,在android SDK中提供了4种用于跨进程通讯的方式。这4种方式正好对应于android系统中4种应用程序组件:Activity、Content Provider、Broadcast和Service。
PS:具体方法因篇幅原因不在这里详述

参考文章

有部分内容参考自其他博主
http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html
http://blog.csdn.net/androidflying007/article/details/53509710

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值