详解Android封装一个全局的BaseActivity
程序员文章站
2022-07-06 09:39:50
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的资料请关注其它相关文章!
上一篇: postgresql 实现得到时间对应周的周一案例
下一篇: TCP
推荐阅读
-
Android工程:引用另一个Android工程的方法详解
-
详解Android开发技巧之PagerAdapter实现类的封装
-
Android开发判断一个app应用是否在运行的方法详解
-
Android编程实现全局获取Context及使用Intent传递对象的方法详解
-
Android BaseActivity与BaseFragmnt的封装方法
-
详解Android封装一个全局的BaseActivity
-
详解Android开发技巧之PagerAdapter实现类的封装
-
Android开发判断一个app应用是否在运行的方法详解
-
详解如何将angular-ui的图片轮播组件封装成一个指令
-
Android BaseActivity与BaseFragmnt的封装方法