`

android 内存回收原理

阅读更多
1. ActivityManagerService 集中管理所有进程的内存资源分配。所有进程需要申请或释放内存之前必须调用 ActivityManagerService 对象,获得其“许可”之后才能进行下一步操作,或者 ActivityManagerService 将直接“代劳”。类 ActivityManagerService 中涉及到内存回收的几个重要的成员方法如 下:trimApplications(),updateOomAdjLocked(),activityIdleInternal() 。这几个成员方法主要负责 Android 默认的内存回收机制,若 Linux 内核中的内存回收机制没有被禁用,则跳过默认回收。

2.可参见 ActivityManagerService.java。
回收动作入口:activityIdleInternal()
Android 系统中内存回收的触发点大致可分为三种情况。第一,用户程序调用 StartActivity(), 使当前活动的 Activity 被覆盖;第二,用户按 back 键,退出当前应用程序;第三,启动一个新的应用程序。这些能够触发内存回收的事件最终调用的函数接口就是 activityIdleInternal()。当 ActivityManagerService 接收到异步消息 IDLE_TIMEOUT_MSG 或者 IDLE_NOW_MSG 时,activityIdleInternal() 将会被调用

3.进程被杀死的条件是:
● 必须是非 persistent 进程,即非系统进程;
● 必须是空进程,即进程中没有任何 activity 存在。如果杀死存在 Activity 的进程,有可能关闭用户正在使用的程序,或者使应用程序恢复的时延变大,从而影响用户体验;
● 必须无 broadcast receiver。运行 broadcast receiver 一般都在等待一个事件的发生,用户并不希望此类程序被系统强制关闭;
● 进程中 service 的数量必须为 0。存在 service 的进程很有可能在为一个或者多个程序提供某种服务,如 GPS 定位服务。杀死此类进程将使其他进程无法正常服务。
以上条件缺一不可。


分享到:
评论

相关推荐

    Android内存回收机制

    Android内存回收机制策略 1、GC 2、lowmemorykiller GC GC是java虚拟机的内存回收机制。Android GC原理探究https://www.jianshu.com/p/a7f31aee4e2e lowmemorykiller lowmemorykiller总结:...

    android内存分析

    Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存,所有对象在java堆内分配空间;然而对象的释放是由垃圾回收器来完成的。C/C++中的内存机制是“谁污染,谁...

    android 内存分析

    本文档描述andorid,内存回收机制low mem kill oom kill pmem 等驱动原理

    AndroidGC原理探究UI

    1、JVM内存回收机制1.1回收算法标记回收算法(MarkandSweepGC)从”GCRoots”集合开始,将内存整个遍历一次,保留所有可以被GCRoots直接或间接引用到的对象,而剩下的对象都当作垃圾对待并回收,这个算法需要中断...

    android内存及内存溢出分析详解

    一、Android的内存机制 Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存,所有对象在java堆内分配空间;然而对象的释放是由垃圾回收器来完成的。C/C++中的...

    《Android系统源代码情景分析》

    6.1.6 匿名共享内存块的回收过程 6.2 运行时库cutils的匿名共享内存访问接口 6.3 匿名共享内存的C++访问接口 6.3.1 MemoryHeapBase 6.3.2 MemoryBase 6.3.3 应用实例 6.4 匿名共享内存的Java访问接口 ...

    帧动画控件,优化帧动画加载的内存占用、解决帧动画销毁内存不释放的问题

    2.帧动画停止后无法回收内存 加载原理 每次只加载接下来要展示的图片 使用重复的内存区块读取图片,防止内存抖动,减轻申请内存区块,加快图片加载速率 使用内存缓存加载的图片,查看动画加载图片是否在内存中

    深入解析ANDROID虚拟机

    分别讲解了android系统基础知识,android系统的结构和核心框架,Java虚拟机和Dalvik虚拟机的知识,实现程序编译和调试,Dalvik的运作流程,DEX优化和安全管理,Android虚拟机生命周期的管理和内存分配策略,...

    Android系统源代码情景分析-罗升阳-源码

    6.1.6 匿名共享内存块的回收过程 6.2 运行时库cutils的匿名共享内存访问接口 6.3 匿名共享内存的C++访问接口 6.3.1 MemoryHeapBase 6.3.2 MemoryBase 6.3.3 应用实例 6.4 匿名共享内存的Java访问接口 6.4.1 ...

    android进程保活

    对App进程的保活处理,延长App的驻留内存时长,并在主进程回收后拉起。

    Android中内存泄漏需要的注意点

    如果你对垃圾回收机制有所了解,我想这个问题基本难不住你,因为知道了原理,自然不会去触碰这些极易导致内存泄漏的雷区。 该题重在积累,不需要死记硬背,自己多总结即可。 1. 长生命周期对象持有 Activity 这基本...

    Android面试题整理

    Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。 在Android中,怎么节省内存的使用,怎么主动回收内存?

    Android系统源代码情景分析光盘

    5.1.4 Binder设备文件的内存映射过程............................................................ 166 5.1.5 内核缓冲区管理........................................... 173 5.2 Binder进程间通信库...........

    积分管理系统java源码-AndroidKnowledgeSystem:Android知识架构体系

    内存回收机制 并发编程 同步机制 violate和synchronize wait和notify 线程池 锁 源码分析concurrent包 ConcurrentHashMap CopyOnWriteArrayList BlockingQeque ThreadLocal 反射 Kotlin Kotlin的优势 协程 Android...

    你了解Android LMK机制么?

    Android进程的回收策略5.3 保活的方法二、方法篇三、总结 前言 上文主要介绍了Andorid内存的管理机制,本文对其中的LMK机制进行深入扩展总结。 我们知道出现Crash应用闪退和崩溃一般有三个原因:ANR(程序无响应)...

    Android学习系列教程实例.pdf

    Android 学习文档总结 ................... 1 DevDiv 推荐资源 ........................ 2 Windows 8 ........................................................... 2 iOS .........................................

    LruCache与图片的二次采样

    为了保证内存的使用始终维持在一个合理的范围...这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。

    技术面试必备知识点.zip

    包括::Android、Java、C、C++、Python、Flutter、Gradle、数据结构、计算机组成原理、计算机网络、操作系统、算法、数据结构、设计模式、密码学等等 Java是一种高性能、跨平台的面向对象编程语言。它由Sun ...

    Android APP性能优化分析

    本文通过Android APP性能优化的四个方面做了详细分析,并对原理和重点做了详细解释,以下是全部内容: 说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃...

Global site tag (gtag.js) - Google Analytics