Android中BaseActivity抽象setUp方法的实现可行性咨询
这个方案是完全可行的,而且不会因为BaseActivity的onCreate中调用抽象方法而抛出异常,下面给你详细拆解原因:
1. 抽象方法调用的安全性
在Android的Activity生命周期中,onCreate方法是在Activity实例完全创建之后才会被系统调用的。当你在BaseActivity的onCreate里调用抽象方法setUp()时,实际执行的是子类(比如MainActivity)中已经实现的setUp逻辑——因为子类继承抽象类时必须实现所有抽象方法,否则编译阶段就会报错,根本不会走到运行时。所以运行时不会出现“抽象方法未实现”的异常。
2. 你的代码流程是通顺的
看你给出的MainActivity代码:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); loadData(); }
当调用super.onCreate(savedInstanceState)时,会触发BaseActivity的onCreate,进而调用MainActivity的setUp()方法,完成视图绑定、登录状态判断等初始化操作;之后才会回到MainActivity的onCreate执行loadData(),这个流程完全符合Activity初始化的逻辑,没有冲突。
3. 这个封装方式的优势
这种写法本质是模板方法模式的应用,把Activity初始化的通用逻辑(或者说必须执行的前置操作)封装在父类的生命周期方法里,子类只需要专注实现自己的setUp和业务逻辑,确实能省去每个子类手动调用setUp()的麻烦,是Android开发中很常见的封装手段。
潜在注意点
唯一需要留意的是:在子类的setUp()方法中,不要依赖那些还未初始化的成员变量(不过从你的MainActivity代码来看,mBinding是在setUp里初始化的,其他成员变量也都是在setUp或之后使用,完全没问题)。
内容的提问来源于stack exchange,提问作者bycfly

