我创建了一个通知程序类,该类使用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次。
暂无答案!
目前还没有任何答案,快来回答吧!