Android Activity / Fragment内存泄露引论

简介: Android Activity / Fragment内存泄露引论Android发生OOM(OutOfMemoryError)问题的重要因素是编程设计不佳的代码出现内存泄露(Leak)造成Android分配的内存紧张。


Android Activity / Fragment内存泄露引论


Android发生OOM(OutOfMemoryError)问题的重要因素是编程设计不佳的代码出现内存泄露(Leak)造成Android分配的内存紧张。关于内存泄漏的问题,请参看我之前写的文章:
1,《Java的OutOfMemoryError和StackOverflowError》链接:http://blog.csdn.net/zhangphil/article/details/78246692 
2,《Java的JVM GC(Garbage Collection)垃圾回收原理机制及算法》链接:http://blog.csdn.net/zhangphil/article/details/78260863 
3,《Android DVM和Java JVM以及ART概述》链接:http://blog.csdn.net/zhangphil/article/details/78233513 
引发Android内存泄露的两大情况常见的有Activity内存泄露(Activity Leak)和Bitmap内存泄露(Bitmap Leak)。
Activity在其生命周期内,任意一个Activity随时可能切换前台/后台。当Android分配给Dalvik Virtual Machine的内存不够时,Android系统会触发Dalvik Virtual Machine 的GC机制回收处于后台Activity的内存资源。
举例,比如常见的开发场景:Activity从网络下载一批大型图片加载到一个ListView中,下载成功后把图片设置到ListView里面。于是在代码中启动一批异步线程如Thread下载图片任务,这些批量后台线程Thread,持有对Activity的引用。
假设此时不巧网络质量不佳或者服务器端响应时间非常慢。耗费了很长时间都未完成加载任务,用户没有耐心继续等待,然后就切换或者退出该Activity。虽然现在Activity已经被调度到后台,甚至执行到onDestroy,但是后台运行的一大批异步线程Thread任务仍持有对Activity实例的引用,Android系统无法回收Activity实例,结果就造成Activity Leak。

相关文章
|
2月前
|
存储 前端开发 Java
Android MVVM架构模式下如何避免内存泄漏
Android采用MVVM架构开发项目,如何避免内存泄漏风险?怎样避免内存泄漏?
99 1
|
19天前
|
Android开发 开发者
Android性能优化——内存管理的艺术
Android性能优化——内存管理的艺术
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
85 6
|
2月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
28 3
|
2月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
20 3
|
2月前
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
51 2
|
2月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
18 0
|
3月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
51 4
|
3月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
54 0
|
7月前
|
数据库 Android开发 开发者
Android基础知识:请解释Activity的生命周期。
Android基础知识:请解释Activity的生命周期。
77 2