文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

android中用getApplicationContext()会不会避免某些内存泄漏问题?

2022-06-06 13:45

关注

作者:Hewi
链接:https://www.zhihu.com/question/34007989/answer/58296467
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

android中用getApplicationContext()会不会避免某些内存泄漏问题?

RT,在android开发中,如果在使用context的地方全部用getApplicationContext()会不会避免某些内存泄漏问题?


首先,Activity的Context和Application的Context肯定不是一个东西,一个是当前活动的 Context,它的生命周期仅限于此活动,一个是整个应用程序的Context,它的生命周期伴随着整个程序,鉴于Activity的Context的 特点,滥用它往往会造成内存泄露,如下代码所示:

public class TestContext{
	private static TestContext testContext;
	private Context context;
	private TestContext(Context context){
		this.context = context;
	}
    public static synchronized TestContext getInstance(Context context){
    	if(null == testContext)
    		testContext = new TestContext(context);
    	return testContext;
    }
}

显而易见,上述单例模式中textContext是强引用static类型,往往它的生命周期伴随着整个应用程序,但你传 递进来的Context若是一个Activity的,只要我们这个应用程序还活着,它就没有办法正常的回收,这就造成了内存的泄露。解决的方法很简单,将 初始化TestContext是传递的参数context变为context.getApplicationContext()既可,因为用此方法获得的是应用程序的 context,因此就不用担心内存泄露了。既然如此的话,在能使用context的地方全部替换context.getApplicationContext()不就皆大欢喜了吗?很遗憾的来 说,这样不行,因为他们根本不是一个东西,它们的应用场景是不同的,并非所有的Activity的Context的场景,Application的 Context依然可以,一下是我总结出来的一个表格,表示了它俩之间的应用场景:
 


其实我们只要把握住两条原则即可:

1.凡是和UI相关的,都不建议使用Application的Context.

2..不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的,若不一样,请考虑一下是否可以使用Application的Context.


作者:东街小霸王


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯