android怎么防止内存泄漏,android – 适当的onDestroy()/如何避免内存泄漏

Q1.你已经把它从上下文中(不开玩笑了:)

如果您看到原始文章,则泄漏实际上发生在引入Bitmap字段的下一个代码片段中.罗马然后清楚地解释为什么它泄漏.您显示的代码不会泄漏.

Q2.仅在没有其他选择的情况下使用活动上下文,并且不允许在范围大于其引用的活动范围的范围内引用它.您所显示的代码不会泄漏到我可以看到,因为没有一个上下文引用的范围大于您的Activity.你怀疑它是吗?

Q3.当使用Bitmap,静态引用时,我习惯于解除onPause()中的Views的Bitblock(记住onDestroy())是不能保证的,但它是无关紧要的,就像被破坏一样,你的进程被杀死,所以GC不是关心).链接的文章还解释了如何做到这一点.我已经做了一个模板模式,我的任何活动处理位图.

[编辑]

对不起,我刚刚检查.该文章没有显示如何取消绑定.这是我使用的模式:

@Override

protected void onPause()

{

super.onPause();

unbindDrawables(findViewById(R.id.mainLayout));

System.gc();

}

@Override

protected void onDestroy()

{

super.onDestroy();

unbindDrawables(findViewById(R.id.mainLayout));

System.gc();

}

private void unbindDrawables(View view)

{

if (view.getBackground() != null)

{

view.getBackground().setCallback(null);

}

if (view instanceof ViewGroup && !(view instanceof AdapterView))

{

for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)

{

unbindDrawables(((ViewGroup) view).getChildAt(i));

}

((ViewGroup) view).removeAllViews();

}

}

mainLayout是活动布局的根视图.

我包括onDestroy(),因为我可以手动完成()我的活动.

注意.调用system.gc()是一个复杂的主题,你可能想要省略它.在这里有一些很好的讨论,为什么这不是一件好事,主要关心的是表现.但是,在我看来,当一个活动被销毁时,暗示现在是执行GC的好时机,不会有任何伤害.在不必要地调用它的低效率将在销毁活动的间接费用中丢失.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值