Android 如何保证逻辑业务类只初始化一次

Posted 陈旭金-小金子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 如何保证逻辑业务类只初始化一次相关的知识,希望对你有一定的参考价值。

前言

我们的 Activity 由于系统配置更改等原因, 有可能会重建. 如果重建的时候, 业务逻辑类也是重新创建的, 那么也还可以接受.

但是由于我们现在 ViewModel 用的人已经很多了, 在正确使用 ViewModel 的情况下, 业务逻辑类都会被 ViewModel 持有, 那么 Activity 重建的时候, 重新走 onCreate 就会导致有些初始化会走两次. 但是有 ViewModel 的作用下, 其实不用初始化了, 因为配置更改不会导致 ViewModel 中的任何数据被销毁和重建.

目的

我们需要在 Activity 正常情况和 发生配置更改的情况下, 都得保证初始化代码只走一次!

思路

其实这种情况下, 我们可以很简单的想到, ViewModel 不就可以保证自己只初始化一次吗? 利用这个特性, 我们使用一个 ViewModel 来实现此功能

实现

class InitOnceViewModel: ViewModel() 
    var isInit: Boolean = false


fun FragmentActivity.initOnceUseViewModel(action: () -> Unit) 
    val initViewModel: InitOnceViewModel by this.viewModels()
    if (!initViewModel.isInit) 
        initViewModel.isInit = true
        action.invoke()
    

代码非常的简单, 就是声明了一个 InitOnceViewModelViewModel, 然后给 FragmentActivity 写了一个扩展, 利用 flag 做了一个判断来保证初始化一次!

使用

class XxxActivity: FragmentActivity 
    function onCreate() 
        initOnceUseViewModel 
            // 这里就是初始化一次的代码了
        
    

使用非常的简单, block 中就可以写你的初始化代码了, 保证就执行一次哦

喜欢我的文章, 记得关注我哦!

以上是关于Android 如何保证逻辑业务类只初始化一次的主要内容,如果未能解决你的问题,请参考以下文章

Android 如何保证逻辑业务类只初始化一次

android架构设计组件化

「CI集成」基于Jest Mock API对业务逻辑集成测试附源码

逻辑删除记录时-保证业务的唯一性约束

Android 逆向Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )

Java 语言基础:如何保证某个函数只被调用一次