原标题:Android基于DialogFragment封装一个通用的Dialog
一、背景
Dialog是项目中最常用的一个功能之一了,接手项目的时候发现项目中是封装了一个dialog的,但是发现是用单例封装的,大致如下:
privateMyDialog(){
}
publicstaticMyDialog getInstance(){
returnDialogHolder.instance;
}
privatestaticclassDialogHolder{
privatestaticMyDialog instance = newMyDialog();
}
publicvoidshow(){}
publicvoiddismiss(){}
使用单例除了可能会有内存泄漏问题,在使用过程中还发现一个问题:不同页面的dialog可以相互影响,想想也对,因为全局只有一个dialog嘛,项目中有一个场景:A页面跳B页面,一进B页面的onCreate()时需要弹一个dialog,发现每次都弹不出来,debug发现原来在A页面的onStop()方法里调用了dismiss()方法,A页面跳B页面生命周期走的是:
A页面: onPause()
B页面: onCreate()
B页面: onStart()
B页面: onResume()
A页面: onStop()
所以原因也找到了,每次在B的onCreate()里面刚调用了show(),紧接着又调用了A的onStop