android静态类保存context,Android开发 静态static类与static方法持有Context是否导致内存泄露的疑问...

本文探讨了Android开发中静态类持有Context可能导致的内存泄露问题。通过实例分析,解释了单例模式下静态变量持有Context与方法内传入Context的区别,指出前者可能导致Activity或Service的生命周期无法正常结束,从而引发内存泄露。同时,文章提到了应用的Context与Activity/Service Context的生命周期差异,并提供了检测和避免内存泄露的方法。
摘要由CSDN通过智能技术生成

简述

在Android开发的过程中,难免会使用单例模式或者静态方法工具类.我们会让它们持有一些外部的Context或者View一般有以下几种情况:

单例模式,类的全局变量持有Context 或 View (注意!持有View和持有Context其实是一样的) ----->此方式会内存泄露

单例模式,方法引入Context  ----->此方式不会内存泄露

工具类静态方法持有Context 或 View

工具类静态变量持有Context 或 View

上面我已经说明了会内存泄露的情况,我们就来逐一详细说明下如何操作,和证明他们是否会内存泄露

Context的类型认识

在讲解关于静态持有Context之前,我们需要来认识一下Context自己的区别,原则上Context其实只有2种(尽管Activity/Fragment/Service/都有Context,但是实际上他们属于一个类型的Context)

第一种

应用的Context,下面的2行代码都是调用应用的Context,这个Context在一个app里只会有一个.并且在App启动时创建,App关闭时消亡,所以这个Context是贯彻App生命周期全程的.

Context applicationContext =getApplicationContext();

Context baseContext= getBaseContext();

第二种

Activity 或者 Service 自己,Activity 或 Service自己本身就是Context,这种Context的生命周期只在Activity或Service的生命周期下,关闭了Activity后Context理所应当的也随着消亡.有多少Activity和Service就会有多少个Context,并且重复多次创建某个Activity的时候Context也是多个

单例模式持有Context的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值