`

知识梳理之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课后习题答案整理.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设备...

    study.rar Android2020最新面试整理

    此外,"Android高级面试题.pdf"可能涉及更深层次的Android系统知识,比如NDK开发、JNI、多进程通信、动态加载、热修复技术,甚至是AOSP源码分析等。这部分内容旨在考察候选人的深度学习和问题解决能力。 面试中,...

Global site tag (gtag.js) - Google Analytics