在开发中,连续打开了几个Dialog样式的Activity之后,发现这些Activity居然都受配置变更(如折叠展开)的影响,也就是说这些Activity都会重启或者会回调onConfigurationChanged
方法,这与以往的开发经验,只有顶部的Activity会重启有很大差别,这到底是为什么呢?
仔细观察发现,Dialog样式的Activity是浮在底部的Activity之上的,而底部的Activity也得受配置影响啊,不然底部的Activity由于部分可视,如果还是保持原样就会很突兀。观察到这个事实之后,自己写代码验证如下:
(以下ABCD均表示单个Activity,箭头表示startActivity
)
A Activity → B Dialog,配置变更时AB均重启,重启顺序为BA。
A Activity → B Dialog → C Dialog,配置变更时ABC均重启,重启顺序为CBA。
A Activity → B Activity → C Dialog → D Dialog,配置变更时BCD均重启,重启顺序为DCB。
经过验证,配置变更事件会一直传递至非Dialog样式的Activity为止,其实这也好理解,毕竟只要在屏幕上当前展示的Activity,都应该处理配置变更。至于底层的代码逻辑,无暇研究,交给看客了。
参考文档:
dialog样式的activity,可全屏、可任意大小的dialog实现-CSDN博客
处理配置变更 | Android Developers