我是匕首和MVP模式的新手,并且内存泄漏。
我不确定造成内存泄漏的原因。
我认为泄漏的原因是txtCityName
但也许我的错误是在匕首或MVP中。
如果您需要更多细节来回答评论,请。
@OnClick(R.id.constraintLayoutCity)
void onCityClick() {
searchPresenter.getCity();
}
public void getCity() {
cities = new CharSequence[]{"manchester", "london", "madrid", "barcelona"};
adb.setSingleChoiceItems(cities, 0,(d, n) -> {
selectedCity = n;
view.setCity(cities[n].toString());
d.dismiss();
});
adb.setTitle("select a city");
adb.show();
}
public void setCity(String city) {
txtCityName.setText(city);
}
LeakingInstance(referenceKey=7b6a8af5-1103-44d0-91c4-5cb25597d2a2, referenceName=, instanceClassName=androidx.constraintlayout.widget.ConstraintLayout, watchDurationMillis=5151, excludedLeak=false, leakTrace=
┬
├─ ir.reservs.reservs.ui.main.search.SearchFragment
│ Leaking: NO (Fragment#mFragmentManager is not null)
│ ↓ SearchFragment.txtCityName
│ ~~~~~~~~~~~
├─ androidx.appcompat.widget.AppCompatTextView
│ Leaking: YES (View#mAttachInfo is null)
│ View.mID=R.id.txtCityName (2131362166)
│ View.mWindowAttachCount=1
│ ↓ AppCompatTextView.mParent
├─ androidx.constraintlayout.widget.ConstraintLayout
│ Leaking: YES (View#mAttachInfo is null)
│ View.mID=R.id.constraintLayoutCity (2131361908)
│ View.mWindowAttachCount=1
│ ↓ ConstraintLayout.mParent
╰→ androidx.constraintlayout.widget.ConstraintLayout
Leaking: YES (RefWatcher was watching this)
, retainedHeapSize=null)```
我了解到导致textview内存泄漏的原因是将textview设置为屏幕外。 但就我而言,我的textview位置正确。所以我不认为泄漏是为了这个。
在约束布局上的单击侦听器上设置有问题吗?
答案 0 :(得分:0)
我怀疑您在演示者中引用了txtCityName。通常,内存泄漏是由引用活动或片段的静态成员引起的,然后当该活动或片段被系统破坏时,由于静态引用,垃圾收集器无法清除它。演示者永远不应该了解您的片段。 txtCityName是在演示者中还是在片段之外的项目中任何地方引用?