Android中有多种进程:前台进程,可见进程,服务进程,后台进程,空进程。

-- Android将进程分为6个等级,它们按优先级顺序由高到低依次是:
 1.前台进程( FOREGROUND_APP)
 2.可视进程(VISIBLE_APP )
 3. 次要服务进程(SECONDARY_SERVER )
 4.后台进程 (HIDDEN_APP)
 5.内容供应节点(CONTENT_PROVIDER)
 6.空进程(EMPTY_APP)

> Android私有进程和公有进程的区别: 
  私有进程,android:process=":remote",以冒号开头,冒号后面的字符串原则上是可以随意指定的。如果我们的包名为“com.biyou.multiprocess”,则实际的进程名 为“com.biyou.multiprocess:remote”。这种设置形式表示该进程为当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。 
  进程名称不以“:”开头的进程都可以叫全局进程,如android:process="com.secondProcess",以小写字母开头,表示运行在一个以这个名字命名的全局进程中,其他应用通过设置相同的ShareUID可以和它跑在同一个进程。

  如果需要将某些组件(如Service,Activity等)运行在单独的进程中,就需要用到android:process属性了。我们可以给android的组件设置android:process属性来使其运行在指定的进程中。
 AndroidMantifest.xml中的activity、service、receiver和provider均支持android:process属性,设置该属性可以使每个组件均在各自的进程中运行,或者使一些组件共享一个进程;
 AndroidMantifest.xml中的application元素也支持android:process属性,可以修改应用程序的默认进程名(默认值为包名)

-- Android App进程中最少有几个线程,在ART上最少八个线程:
 1"Binder_1"@4,098 in group "main": RUNNING
//就是我们的ApplicationThread,这个类实现了IBinder接口,用于进程间通信。具体来说,是我们的应用程序和Ams通信的工具。
 2 "Binder_2"@4,099 in group "main": RUNNING
就是我们的ViewRoot.W对象,它也是实现了IBinder接口,是用于我们的应用程序和Wms通信的工具。
 3 "FinalizerDaemon"@4,095: WAIT
 4"FinalizerWatchdogDaemon"@4,096: WAIT
 5"HeapTaskDaemon"@4,097: MONITOR
 6"main"@4,092 in group "main": SLEEPING //UI线程
 7"ReferenceQueueDaemon"@4,094: WAIT
 8 "Signal Catcher"@4,093: WAIT
> Android 进程管理
-- 进程管理
Android系统中的进程管理:进程的创建-- http://qiangbo.space/2016-10-10/AndroidAnatomy_Process_Creation/
  对于Android来说,进程管理的主要内容包括以下几个部分内容:
 1.进程的创建;
 2.进程的优先级管理;
 3.进程的内存管理;
 4.进程的回收和死亡处理;

-- 进程的优先级
Android系统中的进程管理:进程的优先级-- http://qiangbo.space/2016-11-23/AndroidAnatomy_Process_OomAdj/
在Android系统中,进程的优先级影响着以下三个因素:
1.当内存紧张时,系统对于进程的回收策略
2.系统对于进程的CPU调度策略
3.虚拟机对于进程的内存分配和垃圾回收策略

 在如下一些情况下,系统会对所有应用进程的优先级进行更新:
1.当有一个新的进程启动时;
2.当有一个进程退出时;
3.当系统在清理后台进程时;
4.当有一个进程被标记为前台进程时;
5.当有一个进程进入或者退出cached状态时;
6.当系统锁屏或者解锁时;
7.当有一个Activity启动或者退出时;
8.当系统正在处理一个广播事件时;
9.当前台Activity发生改变时;
10.当有一个Service启动时;

-- 进程的内存的回收
 Android系统中的进程管理:内存的回收-- http://qiangbo.space/2016-12-08/AndroidAnatomy_Process_Recycle/
对于内存回收,主要可以分为两个层次:
1.进程内的内存回收:通过释放进程中的资源进行内存回收;
2.进程级的内存回收:通过杀死进程来进行内存回收;

这其中,进程内的内存回收主要分为两个方面:
1.虚拟机自身的垃圾回收机制;
2.在系统内存状态发生变化时,通知应用程序,让开发者进行内存回收;

而进程级的内存回收主要是依靠系统中的两个模块,它们是:
1.Linux OOM Killer;
2.LowMemoryKiller;

垃圾回收的基本想法是要找出虚拟机中哪些对象已经不会再被使用然后将其释放。其最常用的算法有下面两种:
1.引用计数算法;
2.对象追踪算法

更多相关文章

  1. Android 定时重启Android系统源(手机root后可用) [系统支持自定义
  2. android.uid.system Android中如何修改系统时间(应用程序获得系
  3. Android内存之VSS/RSS/PSS/USS
  4. Android -- android app 能分配的最大内存堆栈问题
  5. 如何修改Android应用程序能够使用的默认最大内存值
  6. Android 5.0以下系统支持TLS 1.1/1.2协议版本
  7. Rexsee API介绍:Android WakeLock进程持续

随机推荐

  1. tideways+toolkit对php代码进行性能分析
  2. php+nodeJs+thrift协议,实现zookeeper节点
  3. PHP写时复制(Copy On Write)
  4. PHP中的闭包
  5. PHP 中使用 TUS 协议来实现大文件的断点
  6. 大括号在php中的一些作用
  7. PHP 反射之动态代理
  8. thinkphp常用系统配置大全
  9. php跨域的几种方式
  10. 细数PHP中16个高危函数