如何避免Android内存泄漏

 我来答
飒爽且谦卑灬小鸥1860
2013-10-25 · TA获得超过107个赞
知道答主
回答量:164
采纳率:0%
帮助的人:46.4万
展开全部
对于手机来说,这是个不小的内存,但是这仍然远远不能满足一些开发者的需求。但是,即使你不打算使用所有的内存空间,你也应该尽可能地少用内存,从而使得其他应用能够运行而不是被杀掉。因为Android能够在内存中保持的应用越多,那么用户切换应用的速度就会越快。作为我工作的一部分,我在做android应用开发的时候也会陷入内存泄漏的问题中,大多数时候内存的泄漏都是由于犯了相同的错误:长期持有了一个Context的引用。 Android上 ,Context可以用于很多操作,但是大部分时候是用来加载以及使用资源。这就是为什么所有的widgets在他们的构造函数中接受一个Context参数。在一般的android应用中,你通常有两种Context:分别是Activity和Application。通常的,当我们的类和方法需要使用到context时,我们传递的是Activity这个context:@OverrideprotectedvoidonCreate(Bundlestate){super .onCreate(state); TextViewlabel=newTextView(this);label.setText( Leaksarebad); setContentView(label);}这意味着views拥有一个对整个activity的引用,也就是引用了你的activity所拥有的一切;通常的,这指的是完整的视图层级结构以及所有笑纯它的资源。因此,如果你泄露了一个Context( 泄漏 意味着你保持着它的一个引用,从而使它不能被垃圾回收机制回收),就意味着你泄漏了很多的内存。如果你不小心, 泄漏一 个activity的所有资源真的非常容易。 当 屏幕的方向发生改变的时候,系统默认将会销毁当前的activity并且创建一个新的activity同时保持着原有的状态。在做这个的时候,Android会从资源重新加载应用的UI。现在,想象一下你写了一个应用,这个应用有一张很大的bitmap。你不想再每一次旋转的时候重新加载它。最简单的方法让bitmap持续作用而不随每一个方向而重新加载 ,就是把它放进一个静态域:privatestaticDrawablesBackground;@OverrideprotectedvoidonCreate(Bundlestate){super .onCreate(state); TextViewlabel=newTextView(this);label.setText( Leaksarebad);if(sBackground==null){sBackground=getDrawable(R.drawable.large_bitmap);}label.setBackgroundDrawable(sBackground); setContentView(label);}这段代码很快,但是错误也很严重:它泄漏了第一个activity,这个在第一次屏幕改变时被创建的activity。当一个Drawable被关联到一个view上,这个view就相当于在drawable上设置的一个回调。在上面的代码片段中,这表示drawable有一个TextView的引用,而这个TextView又拥有一个activity的引用(Context),activity依次引用了几乎所有的东西(取决于你的代码)。 有两种简单的方法来避免context 相关的内存泄漏。最显著地一个是避免context 逃出他自己的范围之外。上面的例子就展示了使用静碰李咐态引用的情况,而内部类和他们对外部类的的隐式引用也是同样危险的。第二种方法是使用Application context 。这个context 的生存周期和你的应用的生存周期一样长,而不是取决于activity 的生存周期。如果你想保持一个长期生存的对象扰弯,并且这个对象需要一个context ,记得使用application 对象。你可以通过调用Context.getApplicationContext() or Activity.getApplication() 来获得。 总而言之,想要避免context 相关的内存泄漏 ,记住以下几点: · 不要对activity 的context 长期引用( 一个activity 的引用的生存周期应该和activity 的生命周期相同) · 试着使用关于application的 context 来替代和activity相关的context · 如果一个acitivity 的非静态内部类的生命周期不受控制,那么避免使用它;使用一个静态的内部类并且对其中的activity 使用一个弱引用。解决这个问题的方法是使用一个静态的内部类,并且对它的外部类有一WeakReference,就像在ViewRoot中内部类W所做的就是这么个例子。
天空卫士
2023-08-28 广告
数据防泄漏的优点主要包括:1. 保护机密信息:数据防泄漏可以防止敏感信息的未经授权的访问、使用、泄露、修改或破坏,保障机密信息的保密性。2. 减少损失:数据泄露不仅可能导致声誉受损,还可能造成经济损失,而数据防泄漏可以减少这种风险。3. 防... 点击进入详情页
本回答由天空卫士提供
东门澜6B
2015-07-20 · TA获得超过6693个赞
知道大有可为答主
回答量:7360
采纳率:15%
帮助的人:3785万
展开全部
这个御枯森是没法避免的,安卓本身就不是密封的系统,而是开放的。
但是,可以通过以下的手段来实现保密。

1、手机不root,病毒无法入侵系统根本性文件,也就无法提取内存。
2、手机镇亩root以后,安装360、LBE安全大师等的软件,利用主动防御,也可以实现保密。
3、不访问以下危险网站、黄网等等的。
4、通过应用商店下载软件,而非第三方途径的软件。
5、手机定期清理垃圾、杀毒等。
6、各个应用程序的权限设置都为使用时询问,这样也可以有效的避免自己的隐私泄败段露。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式