`

知识梳理之Android进程

 
阅读更多
Android进程:Android基于Linux,Linux中会为每个用户分配一个进程,一个主线程,Android基本原理一样,默认情况下一个APK对应一个进程;

1、通过在AndroidManifest.xml中为四大组件(Activity、Service、BoradcastReceiver、ContentPrivider)添加android:process =“”熟悉来完成进程的指定,从而可以使一个APK包含不同的进程中;

2、不同进程有不同的内存空间,即使一个APK中,不同进程都是互相不共享的,引用网友的分析:http://www.cnblogs.com/lynchyo/p/3522593.html
引用

每个进程都是运行在不同的虚拟机上,进程间内存的具有不可见性。对于不同的进程,他们载入的Class文件虽然名字一样(比如都是com.breeze.multiprocess.MultiProcessTestActivity),但是他们其实是加载到了不同的内存地址空间。com.breeze.multiprocess.MultiProcessTestActivity中把isChecked变量设置为true,它其实只是把当前进程(com.breeze.multiprocess)的MultiProcessTestActivity类的isChecked变量的设置为了true,com.breeze.MultiProcess.test进程中的 com.breeze.MultiProcess.test.MultiProcessTest_1_Activity类和它位于不同的内存地址空间,当然其变量isChecked也位于不同的内存地址空间,自然也不受影响。


总结:每个进程的运行都有独立的内存空间存放数据,即使两个独立进程使用了同一个类,但两个进程会在各自的内存空间持有一份,互不影响,即使是包裹他们的Application,也是每个进程的组件都拥有一份独立数据。利用这个原理,可以解决Android中的OOM问题,但这不是解决OOM最好的方法,具体关于OOM的深入分析,大家可以参考:http://blog.csdn.net/gemmem/article/details/13017999
内存概念不理解的看这儿:http://blog.csdn.net/gemmem/article/details/8920039


3、系统内存不足时会根据一定的优先级结束一些进程(应用程序),这个优先级可分为:
前台进程
可见进程
服务进程
后台进程
空进程
详细区别可以参考:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html

4、怎么样结束一个进程
A、结束活动Activity:这个大家都知道是finish,但其实当前进程并没有结束;如果项目中包含多个组件(四大组件)那需要结束每一个,这样才完全结束进程。一般的service和Broadcast根据项目进行看是否需要完全退出;
B、结束当前进程:killProcess(int pid)和System.exit(0);注意,这两个方法会影响Activity的生命周期,Activity可能不会执行部分生命周期回调方法,即非正常结束;,不过可以将这两个方法放到onDestroy()方法的最后,即走完生命周期之后介绍进程,虽然也是非正常退出,但不影响程序本身;
注意:在调用者两个方法之前要将系统中的Activity和Service全部退出,否则调用这两个方法,系统只能结束Activity,进程会重新启动;其中一种方法是在Activity和Service中添加广播,在介绍到广播之后结束Activity和Service
C、结束其他进程,如:
restartPackage()在android2.2版本之后则不能再使用此方法
killBackgroundProcesses(String packageName) 
forceStopPackage(String packageName)
killall -HUP packageName || kill -9 pid

以上部分方法需要系统权限和共享签名;
注意:有Service的还是会重启;
详细可参考:
http://blog.csdn.net/null1989/article/details/12745827


5、进程间通信:
A、Intent:Android组件间通信的基础,组件可以在一个应用程序内,也可以是不同的应用程序;
B、Content provider:用于数据库共享,可以远程(夸应用程序)实现增、删、改、查。
C、Broadcast:被动的通信方式,即只能等待接受;
D、AIDL服务:服务间通信的主要方式;
详细参考:http://dengzhangtao.iteye.com/blog/1311703

6、关于进程、线程,引用网友的话:
引用

既然android service是运行在主线程中的,那service还有什么用??
你没有将android 组件和android C/S架构的概念理解清楚,不仅没有理解清楚,还把组件的概念,跟线程、进程混淆在一起了。 我将android比喻成一栋办公大楼,android 中进程就是一个办公室,线程就是办公室里面的员工,办公室是不能干活的,而真正干活的是这个办公室里面的员工。一个员工只能在一个办公室里面干活,而一个办公室可以有很多员工。 Android的老板希望它的公司能办理的井井有条,于是针对每一种职能专门设立管理部门,例如WMS,负责窗口管理的,例如MPS,负责多媒体播放的。 一个部门可以有一个或多个办公室,一个办公室也可以有多个部门。 而android的管理部门往往是不干什么实事的,就像我们的天朝的猿类,你推它一下,它才动一下。所以android需要一些干实事的部门,做对外客户的,这些部门我们统称为apk。Android中有好多这种部门,于是为了防止这些部门瞎干,又把部门分成Activity、Service、BrocastReceiver、ContentProvider四种子部门,这些子部门就是用来跟其它部门做沟通的,而所有的子部门运作时都会由大管家AMS来记录在案。 Activity,做门面的。 Service,做对外支持的。 BrocastReceiver,做门卫收信的。 ContentProvider,做仓库管理的。 做门面的,可以做对外支持的活,也可以做仓库管理的活。但是外面可不这么认为,它想找你要数据,只会找ContentProvier,找对外支持只会找Service。 另外AMS大管家有个不好的习惯,它为了节省公司的资源,AMS那里没有你这个apk任何部门运行记录的时候,它有可能把你的电关了(杀进程)。 而LZ你描述的问题呢,就是你的部门想下载东西,是由Activity子部门去干呢,还是Service去干。我的说法,都可以,但是,AMS那个不好的习惯,你没有任何Service运行,而Activity又退到后台了,那就会把你的进程杀了。

理解:在Android系统中,在默认情况下,一个应用程序内的各个组件(如Activity、BroadcastReceiver、Service)都会在同一个进程(Process)里执行,且由此进程的【主线程】负责执行。如果指定了一个APK中多个进程,那由所在进程的主线程执行。
参考:http://blog.csdn.net/myarrow/article/details/14223493

参考:
http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html
http://www.cnblogs.com/lynchyo/p/3522593.html
http://blog.csdn.net/gemmem/article/details/8920039
分享到:
评论

相关推荐

    android bluetooth框架知识整理

    D-BUS是一种灵活的进程间通信机制,提供了一种标准化的方式来命名服务、发送和接收消息,类似Android系统的Binder机制,但适用性更广。 3. **BlueZ适配层** Android的BlueZ适配层位于BlueZ库和Android框架之间,...

    Android面试题及知识点

    3. **Android进程和线程** - 进程和应用程序的关系,进程的生命周期,前台进程、可见进程、服务进程、后台进程和空进程的区别。 - Handler、Looper和Message:理解主线程和子线程的通信,避免在主线程中进行耗时...

    Android核心知识.pdf

    - **Android组件间通信**:如AIDL(Android Interface Definition Language)用于跨进程通信。 - **Gradle构建系统**:理解和使用构建脚本,定制构建过程。 - **Android Studio**:集成开发环境的使用,包括调试、...

    Java_Android笔试、面试知识整理.pdf

    Java_Android 笔试、面试知识整理 本文档涵盖了 Java 和 Android 相关的笔试和面试知识点,包括计算机基础、计算机网络、数据结构与算法、操作系统、数据库系统、Java 基础、Android 开发等方面。 计算机基础知识...

    Android课后习题答案整理.pdf

    本资源摘要信息是根据 Android 课后习题答案整理文件生成的,涵盖了 Android 操作系统的基本概念、特点、优点、缺点、应用场景等多方面的知识点。 Android 操作系统简介 Android 是谷歌发布的基于 Linux 的开源...

    Android期末复习题01

    ### Android期末复习题知识点梳理 #### 一、Intent的Component属性 **知识点1:Component属性的作用** - **作用**:`Component`属性用于指定`Intent`的目标组件的类名称。 - **工作原理**:通常情况下,Android系统...

    Android课后习题答案整理.doc

    "Android课后习题答案整理" Android 课后习题答案整理从多角度对 ...Android 课后习题答案整理为我们提供了一个详细的 Android 平台知识架构,涵盖了移动操作系统的种类、Android 平台的特征和功能等多方面的知识。

    Android MultiMedia框架完全解析

    6. 多媒体框架不仅涉及到音频和视频的播放、录制,也包括了与之相关的复杂系统服务和进程间通信。 这些知识构成了理解Android多媒体框架工作原理的基础,是开发者在构建应用时需要掌握的核心内容。

    android知识点整理

    ### Android知识点整理 #### Java基础 1. **面向对象的理解** - 面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象包括数据(即字段,也称为属性)和操作这些数据的方法。 - 封装:将对象的...

    14天学会Android开发 飞龙整理 20141005

    "Android开发基础知识点" 以下是从给定的文件中生成的相关知识点: 一、Android是什么? * Android是一个针对移动设备的操作系统和软件平台 * 基于Linux内核,由Google和开放手机联盟OHA开发 * 允许使用Java语言...

    Android面试题集2020版(包含答案整理)第二部分.pdf

    在Android开发中,Binder是一种高效并且常用的跨进程通信(IPC)机制,它不仅实现了进程间的通信,而且确保了数据传输的安全和稳定。为了全面理解Binder机制,我们将从多个角度分析其原理及模型组成,并结合具体实现...

    android平台初级错误整理

    理解和掌握这些知识,可以帮助开发者更顺利地进行Android应用的开发工作。在遇到类似问题时,首先检查错误信息,然后根据提示进行相应的修复,大多数情况下都能解决问题。同时,不断学习和实践也是避免和解决这类...

    android网络编程面试题,Android面试题整理

    Android 网络编程面试题知识点总结 Android 网络编程面试题是 Android 开发者需要掌握的重要知识点。下面总结了 Android 网络编程面试题的知识点。 一、内存优化 * 内存泄漏的定义:程序在申请内存后无法释放本...

    Android技术面试整理附有详细答案

    ### Android技术面试整理知识点 #### 1. Android的四大组件及其作用 - **Activity**:作为用户界面的主要组成部分,Activity负责展示UI并处理用户输入。每个Activity代表一个屏幕,可以包含多个视图(View),用于...

    Java基础+Android面试题

    7. Android进程间通信(IPC):包括常见的IPC机制,例如Binder和AIDL。 8. Android性能优化:内存泄漏总结、MVP模式详解、App启动流程等。 9. Android布局优化:讲解了include、merge、ViewStub的使用以优化布局...

    Learn Android App Development

    根据提供的文件信息,我们可以整理出以下关于Android应用开发的知识点: 1. Android应用开发环境的搭建:文档提到了安装Android开发环境的重要性,这是学习Android应用开发的基础。搭建环境通常包括安装Android ...

    android面试题(精心收集整理).pdf 高清pdf下载.rar 下载

    《Android面试题(精心收集整理)》是一份针对Android开发者准备面试的重要参考资料,这份高清PDF文档包含了Android开发领域的各类常见面试问题和解答,旨在帮助求职者深入理解和掌握Android技术体系,提升面试成功率...

    android 开发中文指南pdf

    2. 应用程序框架的涵盖范围:文档翻译并整理了应用程序框架部分,这是Android应用开发的核心,覆盖了所有主要概念,包括应用程序组件、Intent使用、进程与线程管理、用户界面设计、数据存储、资源管理等。...

    android内核移植文档整理

    以下是对"android内核移植文档整理"中涉及的知识点的详细解释: 1. **Android内核架构**:Android基于Linux内核,它提供了硬件抽象层,使Android能够支持多种硬件平台。内核不仅管理硬件资源,如CPU、内存、I/O设备...

Global site tag (gtag.js) - Google Analytics