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

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

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,以避免出现空指针异常。

猜你喜欢

转载自blog.csdn.net/ZQ200720/article/details/132333220