欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Android封装一个全局的BaseActivity

程序员文章站 2022-04-10 08:06:33
1.前言 对于一个android开发者来说,每一个页面都继承一个单独的系统activity,有时候会带来很多不必要的困扰。比如:每一个页面会有重复的代码,阅读起来麻烦;每一次写新的页面功能总要...

1.前言

  • 对于一个android开发者来说,每一个页面都继承一个单独的系统activity,有时候会带来很多不必要的困扰。比如:每一个页面会有重复的代码,阅读起来麻烦;每一次写新的页面功能总要打开原来的页面代码拷贝一部分过来;有时候代码调试排查问题也不方便等等。
  • 如果你的项目里面没有将activity都继承自一个自己封装的baseactivity、或者针对自己封装的baseactivity觉得还不够完善的,这篇博客可能会对你有帮助!

2.特点

  • 封装:将所有activity都用到的一部分代码封装到一个统一管理的activity类(后面全部起名叫baseactivity),然后由这个baseactivity继承自android系统的appcompatactivity(一般是这个)。
  • 继承:页面上用到的activity都继承自我们的自己baseactivity,baseactivity封装的方法在activity内直接调用。

3.代码及说明

3.1.优缺点

  • 优点:减少了代码的重复,提高了写代码的效率、以及提高了代码的维护性
  • 缺点:不要任何代码都放在baseactivity,那样可能会导致baseactivity过于臃肿,不利于代码的阅读和维护,甚至出现app奔溃

下面会讨论哪些代码应该放在baseactivity里面,哪些需要谨慎

3.2.代码

下面我贴一份我自己封装的baseactivity,在代码中和代码下面做了解释:

3.3.注意点

  • 在baseactivity的每个生命周期内都有log日志,这里是方便观察执行到activity的哪个生命周期,logcat也可以简单封装一下,统一控制日志是否打印。
  • baseactivity并不适合每一个页面的activity,比如进入应用的闪屏页面,就可以考虑不继承baseactivity,因为这个页面通常不需要写太多代码。或者还有其他特殊的业务场景下。
  • 需要注意一个dialog弹窗问题,在baseactivity里面,每次show一个dialog的时候我都是创建一个新的对象,那么就要注意dialog在未关闭之前不能再去show,否则可能会导致dialog出现异常。但是不要在ondestory方法里面去隐藏dialog弹窗,因为在a页面进入b页面的时候,会先执行到b页面生命周期的oncreate、onstart、onresume三个方法,然后再执行a页面的onstop可能还有ondestory方法,所以等b页面加载完成再去销毁a页面是错误的。
  • 有时候为了方便可能有人会把请求android中权限检测的方法放在baseactivity里面,这样并不是特别合适,因为所有继承自baseactivity的页面都会去检测权限,这样会导致用户体验差,所以建议用到权限的地方再去请求,最好自己封装一个工具类,用起来方便一点。
  • baseactivity的封装并不强求子类必须实现activity生命周期相关的方法,除了几个抽象方法(我认为子类需要复写的,可以根据业务自己定),必要的话可以自己复写。

4.总结

不是很复杂,写的也比较详细,也基本适用于绝大部分的场景。可能还有其他需要注意的细节回头想起来再补上。

以上就是详解android封装一个全局的baseactivity的详细内容,更多关于android封装baseactivity的资料请关注其它相关文章!