android单例传入context参数,Android中Context的使用总结-Go语言中文社区

本文探讨了Android中Context的使用,包括Context的继承体系、常见的疑问如getBaseContext与getApplicationContext的区别,以及如何避免因Context导致的内存溢出。特别强调了在单例模式下如何正确保存Context引用以防止内存泄漏,并详细阐述了Activity与Application Context的应用场景及其差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Context继承体系

只用记住一句:Activity 、 Service 与Application 都是继承自ContextWrapper,而ContextWrapper implements Context。每个:Activity 、 Service 与Application都是一个Context实例。

Context 总数 = Activity个数 + Service 个数 + 1个ApplicationContext

可以通过命令行 查看Context的个数

adb shell dumpsys meminfo package_name

二、关于Context的疑问

1. getBaseContext 与 getApplicationContext 区别? 持有Activity的Context 相当于持有Context,而持有AppliactionContex全局仅有这一个

2. 视图中的Context从哪来的? 例如:new TextView(Context);

通常在一个Activity中传入的就是当前Activity或者Activity.getBaseContext(),所以通过View.getContext()其实就是当前Activity的引用。

常见场景,Adapter通常通过构造器传递Context,用于getView 时inflate 视图。但是getView最有一个参数是parentView 这个是ListView对象本身,可以通过parentView.getContext获取Context对象减少手动传递。

3. Context 会出错的地方 Dialog.Builder必须传入Activity,而不能传入Activity.getApplicationContext()

三、内存溢出&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值