我们的项目继承公司即时通讯产品架构,在首页是我们自己的fragment,在这里有我们自己的登录,但是这时候触发即时通讯产品的升级,我们的依附activity被干掉,
progressDialog.show(),崩溃,解决办法就是在fragment的onStop方法内dismiss:中间引发对dialog的绑定思考:
progressDialog绑定mActivity(注:就是传activity的上下文getActivity方法获得)和getContext()都可以运行,我们应该绑定哪个?应该绑定在mActivity上,也就是产品的MainPage页
原因:
getContext()获得的是程序的application实例,一个app只有一个application,只有程序进程杀掉才结束,如果dialog绑定在它上面
会获得超长的生命周期,当它显示后的页面(也就是activity)finish掉,它扔存在且别的页面无法杀死它,这样就造成程序的内存泄漏。
所以应该绑定在显示的activity上。
那为什么绑定在activty会造成bug,因为dialog虽然依赖activity这个view,但是dialog的层级是window级别,activity的finish无法直接
把dialog杀掉,所以我们在activty被干掉的生命周期主动关掉dialog就可以了。