android异步回调内存泄漏,为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?...

为什么这个用于回调的匿名内部类实例不会导致活动泄漏

我假设你在这里的意思是它不会导致内存泄漏,但它肯定可以,因为你实例化匿名Callback是一个Activity 。

如果在Android Activity实例化一个内部类,然后将对该实例的引用传递给其他组件,只要该组件可以访问,那么内部类的实例也是如此。 例如,考虑一下:

class MemorySink { static private Listcallbacks = new ArrayList<>(); public static void doSomething(Callback callback){ callbacks.add(callback); } }

如果您从某些活动创建了Callback实例并将它们传递给doSomething(callback) ,当其中一个Activity被销毁时,系统将不再使用该实例,预计垃圾收集器将释放该实例。 但是,如果MemorySink在这里引用了一个对该Activity有引用的Callback ,那么该Activity的实例即使在被销毁之后也会保留在内存中。 Bam,内存泄漏。

所以你说你的样本没有引起内存泄漏,我首先建议你试试MemorySink ,创建一个简单的Activity “MainActivity”,带有2个按钮,可能还有一些图像来增加内存占用。 在onCreate ,在第一个按钮上设置一个监听器:

findViewById(R.id.firstButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainA

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值