android中可以忽略非框架泄漏吗?

2jcobegt  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(170)

我创建了一个通知程序类,该类使用handler.postdelayed()在一段时间后进行通知,并使用livedata使其具有生命周期意识。但是,即使移除了观察者,这个类也不会从内存中释放出来。androidstudio profiler显示的唯一引用是handler的message类。我知道泄露上下文类是很糟糕的。这个也一样吗?这是一个值得关注的问题吗?有改进的解决方案吗?

public class Notifier {
    private final Handler handler;
    private Runnable runnable;
    private final MutableLiveData<Void> liveData;

    public Notifier() {
        handler = new Handler(Looper.getMainLooper());
        liveData = new MutableLiveData<Void>() {
            @Override
            protected void onInactive() {
                super.onInactive();
                handler.removeCallbacks(runnable);
            }
        };
    }

    public LiveData<Void> notifyAfter(long milliseconds){
        if(runnable != null){
            handler.removeCallbacks(runnable);
        }
        runnable = () -> liveData.setValue(null);
        handler.postDelayed(runnable, milliseconds);
        return liveData;
    }

    public LiveData<Void> getLiveData() {
        return liveData;
    }

    public LiveData<Void> cancelPendingNotification(){
        if(runnable != null) {
            handler.removeCallbacks(runnable);
        }
        return liveData;
    }
}

此通知程序附加到每个列表对象,以在特定时间后通知它(每个对象不同)。现在,当我从网络中获取新的数据集时,列表将被清除并填充新的数据,新的通知程序对象集将附加到这些数据中。数组大小约为50-150,在应用程序的一次运行中可以刷新15-20次。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题