| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 如何使用三方库快速开发安卓应用 -> 正文阅读 |
|
[移动开发]如何使用三方库快速开发安卓应用 |
有很长的一段时间,我非常鄙视只会用三方库的人,甚至我评价一个developer的标准就是他是自己写框架和组件还是说用别人的。现在当然不这么想了,很好的利用脚手架,也是一门学问,利用好的脚手架来开发达到事倍功半的效果,比起全部自己来造轮子要来得更加经济实在。 虽然如此,我还是热衷于维护自己的组件,哪怕是别人写的优秀的组件我都想秉承拿来主义改造成自己的,然后居为己用。记得大学的时候写论文,就想全部自己写,然后洋洋洒洒全都是自己写的,也没有参考别人的,现在回过头去看,写的真是垃圾。要是借鉴了别人的优秀内容,也不会看起来那么粗糙。更有讽刺意义的是,我写完了之后拿到查重系统一查,竟然还不能通过检查。
因此我觉得有必要把我认为不错的组件分享出来,重复类别我只分享一个,目的是,有些小伙伴甚至不知道有做好了的脚手架还在自己努力编写。实际上如果知道了不只一款同类型的脚手架的话,他也就不需要看这篇文章了。 我尽量以大类的形式来介绍这些三方库: UI类Metrial DesignGoogle 的Metrial Design 是我最为推崇的,在我的项目里面,能用md实现的我就不用其他的,用不了的我也尽可能用原生组件或者将界面做的和MD协调。 实际上,这种设计风格有一个专门的网站介绍你怎么样设计你的界面。就叫material-io,他这里不只是包括了安卓应用的设计规范和设计标准,还提供了安卓以外的开发的相关设计资料。这个网站甚至提供了Demo,真的是非常人性化了,大家可以下载来跑一下。 谷歌早几年就在提供的扩展库中提供了这些库,在新建项目的时候就能发现如下字样,这就是Google提供的:
不仅如此,安卓自己也针对性的设计了一些组件,也是在5.0以后引进的。可以通过如下方式引用:
如果你把上面这两个用好了,你就能使用metrial应对大部分的界面设计和交互设计。 异步线程切换Java升级后,对多线程的支持也越发完善,但是针对安卓的优化做的还不够。这就需要一些准们针对安卓的组件来简化异步流程。异步这块,以前出过很多组件,但是到现在,最牛逼的,还是RxJava+RxAndroid,他最厉害的地方不仅仅是把线程管理,线程切换做的非常简单。而是他有一套组合拳,对于其他组件的支持也非常到位,典型的如生命周期管理Rxlifecycle(后面会提到),异步网络请求Retrofit(后面会提到)等都支持的非常好。 口说无凭,上代码,假如你想要保证你的代码执行在主线程:
短短一行代码,做了我们很多行代码做的事情:
当然它有一些被人吹上天的功能,我这里就不一一讨论了,大家有兴趣的话可以百度一下,尝试写一些demo; 网络请求如果你希望你请求网络的逻辑尽可能地简短,代码逻辑尽可能清晰,耦合度尽可能低,开发起来尽可能快,那一定是用Retrofit了。它和Rx使用起来真的非常的方便,对于新手来说上手也很快。大家可以通过官方文档来感受一下; 如果你想请求:
然后你就能够在call的会调用拿到请求结果了;实际上这是一个高度封装的框架,底层实现是okHttp,因此,你可以使用Gson或者FastJson来更快便捷的请求服务器拿到你想要的对象。而不是你需要一个一个去解析返回的结果,这对于文档化非常有帮助,对于代码解耦非常有帮助,反正就是很好用。 Json解析上面说到了Retrofit可以结合FastJson来请求json返回,我们知道有很多api服务器返回的都是json,这样方便客户端和服务器交互数据,也能规范文档的编写和生成。 但是JSON我更推荐阿里巴巴写的FastJson,不为其他的,就是觉得是国人写的,而且用起来也很好用,所以强烈推荐。 权限管理权限请求包括了动态权限申请和Root权限申请; 动态权限请求Android6.0以后,安卓系统对于权限的控制越来越严格,很多权限需要手动申请。但是这个功能,基本所有的APP都需要用到,所以我们自己去写根本没必要,因为有人已经把这个工作做好了。比如大兵顶顶的RXPermission; 使用非常简单,在引用这个库后:
你像往常一样在清单文件中配置好你要申请的权限,然后这么调用一下:
一次性就把权限申请完了(permissions.request可以申请一个也可以申请多个,具体参考文档)。 Root权限如果你得应用为非常规应用,需要请求Root权限,那么可以使用RootBeer.使用起来也很简单:
内存管理虽然java里面有内存回收机制管理内存,但这并不是万能的,比如内存泄漏,就是内存没有被jvm回收导致的。内存检测我们可以用AndroidStudio自带的profile可以通过记录内存使用情况来排查那些地方出现了内存泄漏和不合理的内存分配,但是这毕竟还是太麻烦了点,如果我们可以在写代码的时候规避这些问题不是更好?于是就有了如下工具: 生命周期管理自然还是RX组合拳之Rxlifecycle,我们知道代码没写好就容易导致内存泄漏,泄露多了就容易OOM了。而且内存泄漏会引起用户不满,因为内存一直在消耗但是应用啥事也没干,然后导致系统卡顿到一定程度后用户可能还会选择卸载应用,这样就不太好了。 虽然Rxlifecycle作为生命周期管理的螺丝刀,也在自己的主战场出过一些幺蛾子(就是生命周期没管理好),但是并不影响用户使用他,他真的超级简单。
内存检测尽管我们通过Rxlifecycle实现内存辅助管理,但是也免不了出现一些代码没写好导致内存泄漏的情况,这个时候就希望能更快的检测到内存泄漏。我们可以用LeakCanary实现,使用很简单,就是用用这个包:
在项目中加入LeakCanary之后就可以开始检测项目的内存泄露了,把项目运行起来之后, 开始随便点自己的项目,下面以一个Demo项目为例,来聊一下LeakCanary记录内存泄露的过程以及我如何解决内存泄露的。
如果你觉得看日志麻烦,还可以直接通过通知栏的提示来优化: 是不是超级人性化? 线程优化安卓里面讲到县城优化一定先涉及到的是主线程优化,这个对用户体验影响最大,其次才是子线程优化。主线程优化除了Android Studio提供的Profile工具里面的Cpu选项卡可以跟踪到APP里面的所有线程,等高级的可以通过bugReport查看程序运行日志的线程分配。但是我们不能搞这么复杂,因此就有了BlockCanary; 主线程优化BlockCanary使用方式也比较简单, 要在Application中进行设置一下就可以了:
当然你也可以通过一些配置来更方便的跟踪主线程消耗,BlockCanary的检测原理, 作者已经进行了说明, 就是在主线程消息循环打出日志的地入手, 当一个消息操作时间超过阀值后, 记录系统各种资源的状态, 并展示出来; 子线程优化目前的话除了用好Java提供的多线程并发工具包以外,我暂时也只能通过Android Studio的线程管理工具来跟踪线程使用情况了,大家有发现好用的库欢迎在下方留言,我第一时间加上。 文档处理Excel处理excel文档里面,csv是最简单的。但是有时候我们需要处理xlsx这种最新的文件格式,读取或者生成。如果我们自己去写一个库会很麻烦。 大名鼎鼎的Apache公司给我们提供了这样的库,统一叫作POI。本来是给java用的,但是也有针对android的版本,这个我在github上没有找到,我是自己下载过来导入的。 文件选择日志跟踪日志打印android系统提供的日志打印并不会打印到文件中,而在发布版本中,如果外场报了一个bug,我们就需要根据系统运行的日志来跟踪排查bug,如果没有,难度就大了很多。 通常我们可以自己写一个打印类,在每个类打印的时候将日志同步写道文件中,但是如果不想自己开发,我们也有别的选择,比如Github上就有人写了一个 logger 使用很简单拉:
然后初始化后使用
这个是可以把调用的堆栈打印出来的,非常方便后期跟踪。 图表生成有两种方式生成图表,一种是生成Android原生的图表,另一种是生成h5的图表。这个依据实际使用场景而定,当然三方库不少,我只说我用过的两个; 原生图表MpChart支持条形图,饼状图,泡泡图,折线图等等,功能非常丰富,很多上市的产品都在用这个库。使用也简单,也是依赖库后使用:
然后在布局文件里面使用:
然后new出来对应的图把数据塞进去就好了,这个具体可以去看官方文档。 ECharts我发现牛逼的产品一般来自牛逼的公司,不过也能理解,一般公司哪有精力去研究牛逼的组件呢? 但是apache开源的这个需要我们自己写映射的对象,如果要把这些都是先还是不少工作量的,github上就有热心的abel533同志做好了可以在安卓使用的工具包。我就是基于这个开发的。 数据库我之前开发的报表引擎就是通过一些数据库指令来查询数据库生成h5的报表页面来着,你可以理解成我做了一个中间件,客户通过配置一个表来决定需要从数据库中查询什么是局限实在报表上。而这个里面我用到的数据库就是GreenDao; GreenDao我用它的最大原因是它可以通过对象来生成数据库而不用关心数据库的设计逻辑。 数据库调试
使用的话:
图片处理图片加载网上太多框架了,我就推荐我用得最多的那个Glide,之所以用这个是我发现一些Google项目也在用这个,既然Google都在用,我没有利用不用吧。
然后就是加载了(有更丰富的配置方式,取决于你的需求):
图片裁剪uCrop是目前较火的图片裁剪框架,开发者宣称他会比目前市面上所有的图片裁剪方案都要更流畅。外加他封装程度较高,可自定义,而且颜值很高(似乎这个才是重点),现在越来越多APP选择使用它。 使用如下:
组件化应用开发到后期就需要考虑模块化了,不然人那么多,随便改点啥影响到了别人可不好。模块化包括开发中和开发后,需要用到一些模块化工具: ARouter这个是阿里巴巴写的一个路由框架,用起来也很好用,阿里巴巴还有一个工具atlas,大家可以去了解一下。 tinker最火的热修复框架,不解释,自己去了解。 注解我喜欢用dagger2,没其他的就因为Google一些开源项目里面用到了。不过说到注解,我个人不太爱用,主要是会减慢我的编译速度,小项目的话还是推荐的。 说到注解,其实谷歌的view-binding也是属于动态生成代码,这个我常用,最大的好处是不需要再去findView了。 二维码扫码库,zxing,很强大,但是现在已经比不上国内一些付费的库了,要真是商业场景我反倒是不太推荐这个开源的,花点钱买人家的服务多好,还有售后支持。 流媒体播放视频播放器,ijkplayer,这个你听名字很low,实际上还是小有名气的。他的底层使用Google最新的api(SimpleExoPlayer),做的也不错,推荐使用。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 1:08:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |