Android 使用弱引用(WeakReference)或软引用(SoftReference)

文章详细介绍了Java中的弱引用(WeakReference)和软引用(SoftReference)的使用示例,以及它们在内存管理中的作用,特别强调了软引用在内存不足时的回收机制和避免空指针异常的重要性。

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

下面是使用弱引用和软引用的示例代码:

1.弱引用(WeakReference)示例代码:

import java.lang.ref.WeakReference;

public class MyActivity extends AppCompatActivity {
    private WeakReference<SomeObject> weakRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 创建弱引用对象
        SomeObject obj = new SomeObject();
        weakRef = new WeakReference<>(obj);
        // 使用弱引用对象进行操作
        SomeObject refObj = weakRef.get();
        if (refObj != null) {
            // 对 refObj 进行操作
        } else {
            // refObj 已经被回收
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 清除对弱引用对象的引用
        weakRef.clear();
    }
}

在上述代码中,我们创建了一个 SomeObject 类的实例,并使用 WeakReference 来持有该对象的弱引用。在需要使用对象时,通过 weakRef.get() 方法获取弱引用对象的引用,如果对象未被回收,则可以进行相应操作。在 onDestroy() 方法中,使用 clear() 方法清除对弱引用对象的引用。

2.软引用(SoftReference)示例代码:

import java.lang.ref.SoftReference;

public class MyActivity extends AppCompatActivity {
    private SoftReference<SomeObject> softRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 创建软引用对象
        SomeObject obj = new SomeObject();
        softRef = new SoftReference<>(obj);
        // 使用软引用对象进行操作
        SomeObject refObj = softRef.get();
        if (refObj != null) {
            // 对 refObj 进行操作
        } else {
            // refObj 已经被回收
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 清除对软引用对象的引用
        softRef.clear();
    }
}

在上述代码中,我们同样创建了一个 SomeObject 类的实例,并使用 SoftReference 来持有该对象的软引用。使用方式与弱引用类似,在需要使用对象时,通过 softRef.get() 方法获取软引用对象的引用,并进行相应操作。在 onDestroy() 方法中,使用 clear() 方法清除对软引用对象的引用。

值得注意的是,由于软引用是在内存不足时才会被自动回收,所以在实际使用中需要谨慎判断软引用对象是否为 null,以避免出现空指针异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值