美文网首页
Activity重建恢复带来的一些问题

Activity重建恢复带来的一些问题

作者: 雨之都 | 来源:发表于2023-10-31 13:51 被阅读0次

由于Activity可能会被回收,通常来说有效的监听目标Activity返回的结果是通过onActivityResult或者Activity主动发送广播,这种系统提供的rpc方式,如果通过给Activity设置回调,Activity的业务逻辑完成之后调用回调的这种方式去解决的话,当Activity重建时,我们之前设置的回调是无法恢复的,这个时候看处理逻辑,没判空就会发生空指针异常,要么回调就没法调用了,功能也不正确。

同样的道理,Activity和Fragment之间交互,也不应该通过传递回调的方式进行,除非Activity本身就是那个回调实现。

理论是美好的,现实中可能已经有大量的代码不符合这个规范,从而导致线上应用崩溃或者逻辑不符合预期,这个时候,短期的解决办法是我们在onCreate方法中如下复写

override fun onCreate(savedInstanceState: Bundle?) {
        /** 本Activity不支持销毁重建 */
        super.onCreate(null)
    }

禁止Activity和Fragment重建,因为重建问题而导致的线上崩溃就此被暂时解决,后续正确的处理则是更改代码逻辑,Fragment需要依赖Activity的逻辑,可以使用Activity去实现该接口,或者Activity的ViewModel实现该接口,避免之间传递回调,若项目中有较多直接传递回调的场合,改动起来比较困难,可以使用一个全局单例来管理这些回调,全局单例的回调在Activity销毁时仍然存在,只有当系统内存不足的时候才会回收(这种情况下全局单例就不生效了),不过现在安卓设备大多内存比较充足,这种情况对比Activity的回收的情况来说,相对来说比较少,所以这种方法也可以在实际中使用

相关文章

网友评论

      本文标题:Activity重建恢复带来的一些问题

      本文链接:https://www.haomeiwen.com/subject/vpgiidtx.html