android学习笔记:activity(4)

1.必须要了解不同的应用组件(特别是activity、service、broadcastreceiver)对应用进程的生命周期有何影响,为了确定在内存不足时应该终止哪些进程,Android会根据每个进程中运行的组件以及这些组件的状态,将它们放入“重要性层次结构”。这些进程类型包括(按重要性排序)

        前台进程:是用户目前执行操作所需的进程。在不同情况下,进程可能会因为其所包含的各种应用组件而被视为前台进程。如果以下任一条件成立,则进程会被认为位于前台

                它正在用户的互动屏幕上运行一个activity(其onResume(方法已被调用))

                它有一个broadcastreceiver目前正在运行(其broadcastreceiver。onreceive()方法正                  在执行)

                它有一个service目前正在执行其某个回调(service.oncreate()、service.onStart()                  或service.ondestroy())中的代码

        可见进程:正在进行用户当前知晓的任务,因此终止该进程会对用户体验造成明显的负面影 响。在以下条件下,进程将被视为可见:

                它正在运行的activity在屏幕上对用户可见,但不在前台(其onpause()方法已被调                      用)

                它有一个service正在通过service.startForground()(要求系统将该服务视为用户知                      晓或基本上对用户可见的服务)作为前台服务运行

                系统正在使用其托管的服务实现用户知晓的特定功能,例如动态壁纸、输入法服务等。

        服务流程:包含一个已使用startservice()方法启动的service。虽然用户无法直接看到这些进程,但它们通常正在执行用户关系的任务(例如后台网络数据上传或下载),因此系统会始终使此类进程保持运行,除非没有足够的内存来保存所有前台和可见进程。已经运行了很长时间(例如30分钟或更长时间)的服务的重要性可能会降为,以使其进程降至下文所述的缓存LRU列表。这有助于避免超长时间运行的服务因内存泄漏或其他问题占用大量内存,进而妨碍系统有效利用缓存进程

        缓存进程:是目前不需要的进程,因此,如果其他地方需要内存,系统可以根据需要自由地终止该进程。在正常运行的系统中,这些是内存管理中涉及的唯一进程:运行良好的系统将始终有多个缓存进程可用(为了更高效地切换应用),并根据需要定期终止最早的进程。只有在非常危急(且具有不良影响)的情况下,系统中的所有缓存进程才会被终止,此时系统必须开始终止服务进程。

这些进程通常包含用户当前不可见的一个或多个 Activity 实例(onStop() 方法已被调用并返回)。只要它们正确实现其 Activity 生命周期(详情请见 Activity),那么当系统终止此类流程时,就不会影响用户返回该应用时的体验,因为当关联的 Activity 在新的进程中重新创建时,它可以恢复之前保存的状态。

这些进程保存在伪 LRU 列表中,列表中的最后一个进程是为了回收内存而终止的第一个进程。此列表的确切排序政策是平台的实现细节,但它通常会先尝试保留更多有用的进程(比如托管用户的主屏幕应用、用户最后看到的 Activity 的进程等),再保留其他类型的进程。还可以针对终止进程应用其他政策:比如对允许的进程数量的硬限制,对进程可持续保持缓存状态的时间长短的限制等。

注:进程的优先级也可能因从属进程的其他依赖项而提升。例如,如果进程A已通过context.BIND_AUTO_CREATE标记绑定到service,或在使用进程B中的contentprovider,则进程B的分类始终至少和进程A一样重要。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值