IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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 Design

Google 的Metrial Design 是我最为推崇的,在我的项目里面,能用md实现的我就不用其他的,用不了的我也尽可能用原生组件或者将界面做的和MD协调。

实际上,这种设计风格有一个专门的网站介绍你怎么样设计你的界面。就叫material-io,他这里不只是包括了安卓应用的设计规范和设计标准,还提供了安卓以外的开发的相关设计资料。这个网站甚至提供了Demo,真的是非常人性化了,大家可以下载来跑一下。

谷歌早几年就在提供的扩展库中提供了这些库,在新建项目的时候就能发现如下字样,这就是Google提供的:

implementation 'com.google.android.material:material:1.1.0'

不仅如此,安卓自己也针对性的设计了一些组件,也是在5.0以后引进的。可以通过如下方式引用:

implementation 'com.android.support:design:29.3.0'

如果你把上面这两个用好了,你就能使用metrial应对大部分的界面设计和交互设计。

异步

线程切换

Java升级后,对多线程的支持也越发完善,但是针对安卓的优化做的还不够。这就需要一些准们针对安卓的组件来简化异步流程。异步这块,以前出过很多组件,但是到现在,最牛逼的,还是RxJava+RxAndroid,他最厉害的地方不仅仅是把线程管理,线程切换做的非常简单。而是他有一套组合拳,对于其他组件的支持也非常到位,典型的如生命周期管理Rxlifecycle(后面会提到),异步网络请求Retrofit(后面会提到)等都支持的非常好。

口说无凭,上代码,假如你想要保证你的代码执行在主线程:

Observable.empty().observeOn(AndroidSchedulers.mainThread())
                .compose(getView().bindUntilDestroy()).doOnComplete(() -> {
            // do something here
        }).subscribe(Functions.emptyConsumer(), Log::e);

短短一行代码,做了我们很多行代码做的事情:

  1. 切换主线程
  2. 生命周期管理
  3. 异常处理

当然它有一些被人吹上天的功能,我这里就不一一讨论了,大家有兴趣的话可以百度一下,尝试写一些demo;

网络请求

如果你希望你请求网络的逻辑尽可能地简短,代码逻辑尽可能清晰,耦合度尽可能低,开发起来尽可能快,那一定是用Retrofit了。它和Rx使用起来真的非常的方便,对于新手来说上手也很快。大家可以通过官方文档来感受一下;

如果你想请求:

// 1. 第一步 , 编写接口
public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> listRepos(@Path("user") String user);
}

// 2. 第二步,构造实例
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build();
GitHubService service = retrofit.create(GitHubService.class);

// 3. 执行请求
Call<List<Repo>> repos = service.listRepos("octocat");

然后你就能够在call的会调用拿到请求结果了;实际上这是一个高度封装的框架,底层实现是okHttp,因此,你可以使用Gson或者FastJson来更快便捷的请求服务器拿到你想要的对象。而不是你需要一个一个去解析返回的结果,这对于文档化非常有帮助,对于代码解耦非常有帮助,反正就是很好用。

Json解析

上面说到了Retrofit可以结合FastJson来请求json返回,我们知道有很多api服务器返回的都是json,这样方便客户端和服务器交互数据,也能规范文档的编写和生成。

但是JSON我更推荐阿里巴巴写的FastJson,不为其他的,就是觉得是国人写的,而且用起来也很好用,所以强烈推荐。

权限管理

权限请求包括了动态权限申请和Root权限申请;

动态权限请求

Android6.0以后,安卓系统对于权限的控制越来越严格,很多权限需要手动申请。但是这个功能,基本所有的APP都需要用到,所以我们自己去写根本没必要,因为有人已经把这个工作做好了。比如大兵顶顶的RXPermission

使用非常简单,在引用这个库后:

implementation 'com.github.tbruyelle:rxpermissions:0.10.2'

你像往常一样在清单文件中配置好你要申请的权限,然后这么调用一下:

 public void checkPermissionRequest(FragmentActivity activity) {
        RxPermissions permissions = new RxPermissions(activity);
        permissions.setLogging(true);
        permissions.request(Manifest.permission.READ_EXTERNAL_STORAGE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_CALENDAR)
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean aBoolean) throws Exception {
                        LogUtils.error(TAG, "checkPermission22--:" + aBoolean);
                    }
                });
    }

一次性就把权限申请完了(permissions.request可以申请一个也可以申请多个,具体参考文档)。

Root权限

如果你得应用为非常规应用,需要请求Root权限,那么可以使用RootBeer.使用起来也很简单:

RootBeer rootBeer = new RootBeer(context);
if (rootBeer.isRooted()) {
    //we found indication of root
} else {
    //we didn't find indication of root
}

内存管理

虽然java里面有内存回收机制管理内存,但这并不是万能的,比如内存泄漏,就是内存没有被jvm回收导致的。内存检测我们可以用AndroidStudio自带的profile可以通过记录内存使用情况来排查那些地方出现了内存泄漏和不合理的内存分配,但是这毕竟还是太麻烦了点,如果我们可以在写代码的时候规避这些问题不是更好?于是就有了如下工具:

生命周期管理

自然还是RX组合拳之Rxlifecycle,我们知道代码没写好就容易导致内存泄漏,泄露多了就容易OOM了。而且内存泄漏会引起用户不满,因为内存一直在消耗但是应用啥事也没干,然后导致系统卡顿到一定程度后用户可能还会选择卸载应用,这样就不太好了。

虽然Rxlifecycle作为生命周期管理的螺丝刀,也在自己的主战场出过一些幺蛾子(就是生命周期没管理好),但是并不影响用户使用他,他真的超级简单。

  1. 继承
    Activity/Fragment需继承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。
  2. 调用
    在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。
Observable.interval(1, TimeUnit.SECONDS)
                .compose(this.bindToLifecycle())
                .subscribe(new Action() {
                    @Override
                    public void call(Long num) {
                    }
                });

内存检测

尽管我们通过Rxlifecycle实现内存辅助管理,但是也免不了出现一些代码没写好导致内存泄漏的情况,这个时候就希望能更快的检测到内存泄漏。我们可以用LeakCanary实现,使用很简单,就是用用这个包:

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.3'

在项目中加入LeakCanary之后就可以开始检测项目的内存泄露了,把项目运行起来之后, 开始随便点自己的项目,下面以一个Demo项目为例,来聊一下LeakCanary记录内存泄露的过程以及我如何解决内存泄露的。
项目运行起来之后,在控制台可以看到LeakCanary的打印信息:

D/LeakCanary: Check for retained object found no objects remaining
D/LeakCanary: Scheduling check for retained objects in 5000ms because app became invisible
D/LeakCanary: Check for retained object found no objects remaining
D/LeakCanary: Rescheduling check for retained objects in 2000ms because found only 3 retained objects (< 5 while app visible)

如果你觉得看日志麻烦,还可以直接通过通知栏的提示来优化:
在这里插入图片描述

是不是超级人性化?

线程优化

安卓里面讲到县城优化一定先涉及到的是主线程优化,这个对用户体验影响最大,其次才是子线程优化。主线程优化除了Android Studio提供的Profile工具里面的Cpu选项卡可以跟踪到APP里面的所有线程,等高级的可以通过bugReport查看程序运行日志的线程分配。但是我们不能搞这么复杂,因此就有了BlockCanary;

主线程优化

BlockCanary使用方式也比较简单, 要在Application中进行设置一下就可以了:

BlockCanary.install(this, new AppBlockCanaryContext()).start();

当然你也可以通过一些配置来更方便的跟踪主线程消耗,BlockCanary的检测原理, 作者已经进行了说明, 就是在主线程消息循环打出日志的地入手, 当一个消息操作时间超过阀值后, 记录系统各种资源的状态, 并展示出来;

子线程优化

目前的话除了用好Java提供的多线程并发工具包以外,我暂时也只能通过Android Studio的线程管理工具来跟踪线程使用情况了,大家有发现好用的库欢迎在下方留言,我第一时间加上。

文档处理

Excel处理

excel文档里面,csv是最简单的。但是有时候我们需要处理xlsx这种最新的文件格式,读取或者生成。如果我们自己去写一个库会很麻烦。

大名鼎鼎的Apache公司给我们提供了这样的库,统一叫作POI。本来是给java用的,但是也有针对android的版本,这个我在github上没有找到,我是自己下载过来导入的。

文件选择

Android-FilePicker
在这里插入图片描述

日志跟踪

日志打印

android系统提供的日志打印并不会打印到文件中,而在发布版本中,如果外场报了一个bug,我们就需要根据系统运行的日志来跟踪排查bug,如果没有,难度就大了很多。

通常我们可以自己写一个打印类,在每个类打印的时候将日志同步写道文件中,但是如果不想自己开发,我们也有别的选择,比如Github上就有人写了一个 logger

使用很简单拉:

implementation 'com.orhanobut:logger:2.2.0'

然后初始化后使用

// 1. 初始化
Logger.addLogAdapter(new AndroidLogAdapter());
// 2. 使用
Logger.d("hello");

这个是可以把调用的堆栈打印出来的,非常方便后期跟踪。

图表生成

有两种方式生成图表,一种是生成Android原生的图表,另一种是生成h5的图表。这个依据实际使用场景而定,当然三方库不少,我只说我用过的两个;

原生图表MpChart

支持条形图,饼状图,泡泡图,折线图等等,功能非常丰富,很多上市的产品都在用这个库。使用也简单,也是依赖库后使用:

implementation 'com.github.PhilJay:MPAndroidChart:v2.2.3'

然后在布局文件里面使用:

<com.github.mikephil.charting.charts.BarChart
        android:id="@+id/day_fragment_bar_chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/seekBar1" />

然后new出来对应的图把数据塞进去就好了,这个具体可以去看官方文档

ECharts

我发现牛逼的产品一般来自牛逼的公司,不过也能理解,一般公司哪有精力去研究牛逼的组件呢?
像这个echarts就是Apahe写的;我还用这个东西开发过一款报表引擎(谦虚地说,就是一个报表生成工具拉);

但是apache开源的这个需要我们自己写映射的对象,如果要把这些都是先还是不少工作量的,github上就有热心的abel533同志做好了可以在安卓使用的工具包。我就是基于这个开发的。

功能很强大,向apache致敬,像

数据库

我之前开发的报表引擎就是通过一些数据库指令来查询数据库生成h5的报表页面来着,你可以理解成我做了一个中间件,客户通过配置一个表来决定需要从数据库中查询什么是局限实在报表上。而这个里面我用到的数据库就是GreenDao

GreenDao

我用它的最大原因是它可以通过对象来生成数据库而不用关心数据库的设计逻辑。

数据库调试

Android-Debug-Database,不解释。

查看所有的databases
查看应用程序中所使用的shared preferences所有数据
在给定数据库中运行SQL语句进行增删改查的操作
直接编辑数据库的值
直接编辑shared preferences的值
直接在数据库中添加一行数据
在shared preferences中直接添加键值对
直接删除数据库和shared preferences的数据
搜索数据
数据排序
下载数据库
在内存中调试

使用的话:

 debugImplementation 'com.amitshekhar.android:debug-db:1.0.4'

图片处理

图片加载

网上太多框架了,我就推荐我用得最多的那个Glide,之所以用这个是我发现一些Google项目也在用这个,既然Google都在用,我没有利用不用吧。

implementation 'com.github.bumptech.glide:glide:4.5.0'

然后就是加载了(有更丰富的配置方式,取决于你的需求):

Glide.with(Context context).load(Strint url).into(ImageView imageView);

图片裁剪

uCrop是目前较火的图片裁剪框架,开发者宣称他会比目前市面上所有的图片裁剪方案都要更流畅。外加他封装程度较高,可自定义,而且颜值很高(似乎这个才是重点),现在越来越多APP选择使用它。

使用如下:

implementation 'com.github.yalantis:ucrop:2.2.3'

组件化

应用开发到后期就需要考虑模块化了,不然人那么多,随便改点啥影响到了别人可不好。模块化包括开发中和开发后,需要用到一些模块化工具:

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
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 15:02:38  更:2021-10-24 15:03:48 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码