按Home键切换后台,再次返回,点击事件失效
Jeromeer opened this issue · comments
RT
打开开发者选项的<不保留活动>,模拟内存回收,打开任意弹窗,点击事件正常,按下Home键,再返回页面,点击弹窗的点击事件失效,我自己定义的DialogFragment也卡在这里,应该是回调点击事件的接口为null,所以 布吉岛怎么弄了
TController 同时实现了 Parcelable 和 Serializable,parcel 部分只 write&read 了基本类型,listener 并没有 parcel。在 TDialog 的 onSaveInstanceState 方法中使用的是 putParcelable 保存 TController,在 onCreate 中通过 getSerializable 取出 TController。
作者在 https://github.com/Timmy-zzh/TDialog/commit/71841f74512f174e7a8f26391fa8dd3ec1cf075a “修复按home键报错问题”,应该是类似下面这种报错:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object Caused by: java.io.NotSerializableException:
其实就是 listener 的嵌套类也要 Serializable,那就很麻烦了。所以作者解决此问题的关键就在于:
- TController 增加实现了 Parcelable;
- 在 TDialog 的 onSaveInstanceState 方法中使用 putParcelable 代替 putSerializable;
解决了奔溃问题,但是 listener 就丢了(不保留活动),所以点击事件失效了。不知作者有没有更好的方法可以解决 listener 丢失问题?