解决办法: 1、WeakReference activity持有的dialogFragment对象引用在dismiss后会被gc回收掉,直接解决内存泄漏。 2、既然activity一直持有dialogFragment对象引用,那么我们就直接定义到一个匿名内部内中创建一个一次性的对象来使用。让当前界面不再持有该被回收而还持有引用这种情况。
首先注销掉initView(); 运行看是否报错
如果不报错 继续排查
DataSyncFragment 的回调方法 if (buttonClickListener != null) { buttonClickListener.onButtonClick(dataSyncSetting.getDataSyncPath(), new WeakReference<>(requireActivity())); }
如果故障依旧
继续排查activity里面的代码
由于需要两次创建DataSyncFragment 但是代码里只创建了一个DataSyncFragment 并且 两处只用了同一个onclick方法
解决办法就是同时创建两次DataSyncFragment 写两次onclick 方法
代码进行抽取
addDataSyncFragment() { }
private void handleButtonClick(String dataSyncPath, WeakReference<FragmentActivity> activityRef) { ServerSettingActivity activity = (ServerSettingActivity) activityRef.get(); if (activity != null) {
} }