自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

命运之手

业精于勤而荒于嬉 行成于思而毁于随

  • 博客(817)
  • 资源 (81)
  • 收藏
  • 关注

原创 通过GroovySDL实现GradleScript

DSL的语法更加简洁,对专业编程能力要求低,尤其适合用于编写命令脚本,比如Gradle脚本就是这种风格。核心的内容上面已经讲解完了,这一节我们简单演示一下,Groovy内置的一些DSL风格的编译组件。一些比较新的语言,都提供了这种风格的调用方式,比如Groovy DSL,Kotlin DSL。但DSL的简洁性背后,往往都有专业的面向对象风格代码在支撑,但是用户只和DSL这一层打交道。可以看到,上半部分是面向对象风格的代码,下半部分是DSL风格的代码。Groovy提供了专门的类来解析和执行脚本,主要有。

2024-03-18 22:54:48 758

原创 【Android】主流单元测试组件,一网打尽!

Android的测试的组件比较多,像JUnit,Espresso,UiAutomator,MockitoAndroid的测试范围也包括很多种,比如Java代码测试,Android逻辑测试,AndroidUI测试每个框架的侧重点各有不同,这里我们专门来介绍前三个Google官方推荐的测试框架有些测试组件是只在AndroidTest中可用的,在JavaTest目录下如果访问不了,不用大惊小怪。

2024-03-08 11:10:11 427

原创 【JetPack】Navigation使用方式详解

首次调用该代码的Fragment将创建ViewModel,后调用的Fragment直接复用已存在的对象。搞清楚业务代码是要跟随Fragment生命周期走,还是跟随ContentView的生命周期走。将会销毁Fragment的ContentView,但是会保留Fragment对象。同时允许在Fragment切换时携带参数,共享数据,管理调用栈。当再次返回时,会重新创建View,单不会重建Fragment。所以在处理代码时,一定要理清Fragment的生命周期。Fragment跳转时可以携带参数。

2024-03-03 16:21:49 248

原创 【RxJava】RxJava3核心功能讲解和源码分析

一个是Observable的订阅顺序,一个是doOnSubscribe的执行顺序,Observable的订阅顺序上面已经得出结论了,是从后往前执行的。当没有指定ObserveOn,但是指定了SubscribeOn时,由于onNext代码是从最上游的Observable.subscribeActual开始的,所以所有的onNext都会在最近一个SubscribeOn指定的线程中执行。reduce:将上游Observable的相邻两个数据进行运算,再拿结果与下一个数据进行运算,如此循环,得到一个最终值。

2024-02-27 12:10:22 903

原创 【Maven】自定义仓库位置不生效

Maven可通过配置settings文件中的localRepository选项,来指定发布目录。对于第三方程序,比如IntelliJ Idea,或者Gradle,可能并不会生效。但该配置,只对maven程序自身有效。

2024-04-14 09:00:00 217

原创 【Android】Glide加载SVG,SVG转PNG

编译会生成一个GlideApp,用它来取代默认的Glide加载资源即可。负责将SVG转为Android的Drawable或Bitmap。注册Glide自定义插件。

2024-04-04 20:57:15 422

原创 Kotlin中那些让你眼花缭乱的关键字和操作符

必须配合inline来使用,在编译期间,根据T的类型,智能决定执行哪段代码

2024-04-04 20:46:10 368

原创 【Kotlin】变量和代码块的初始化顺序

由于Init代码块在构造方法之后执行,我们要特别注意,Init使用到的变量有没有被初始化。成员变量 - 靠前的Init代码块 - 靠后的Init代码块 - 构造函数。这个本质上只是一种简写方式,它和普通成员变量的执行顺序是一样的。Lazy变量,则是哪里用到它,它就执行初始化工作,没有固定顺序。基类所有代码,都会先执行,然后再处理子类初始化工作。Kotlin提供了在类声明中指定成员变量的语法。子类中的代码初始化顺序为。

2024-03-18 22:49:10 152

原创 【Android】WebView请求HttpRequest和HttpResponse

通过重写WebViewClient默认方法,我们可以实现拦截网络请求的功能。

2024-03-13 18:34:12 365

原创 【Android】TextView前增加红色必填项星号*

val span = SpannableString("*$text")span.setSpan(ForegroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

2024-03-13 18:26:39 407

原创 【LiveData】LiveData转换及操作符分析

MediatorLiveData会订阅上游SourceLiveData,经过一系列的数据处理和转换工作后,再将新数据发布给自己的订阅者。并且,switchMap在订阅新的LiveData之前,会解除对旧LiveData的订阅。LiveData操作符可以将一个LiveData转换为另一个LiveData。收到上游数据时,生成一个新的LiveData,并订阅新的LiveData。收到重复数据时,不转发给下游,这里的重复是通过equals方法来判断的。收到上游数据时,转换成新的数据格式,并发布给下游订阅者。

2024-03-03 16:06:25 157

原创 【RxJava】Subject子类功能区别和应用场景分析

Subject既是Observable,也是Observer,既可以发送事件,也可以接收事件Subject和EventBus有点类似,但比EventBus更加简单强大,因为它拥有Rx的全部能力Subject有几个常见的子类,他们在使用方式上完全一致但是接收规则有所不同,当有多个Event发布时,接收到的事件可能不一样。

2024-02-27 10:52:32 184

原创 【Kotlin】作用域函数使用方式对比

| ScopeFunction | InputValue | ReturnValue || :-----------: | :--------: | :---------: || run | this | any || apply | this | input || let | it | any || also | it |

2024-02-20 13:14:12 86

原创 【RxJava】指定Scheduler的线程名称

【代码】【RxJava】指定Scheduler的线程名称

2024-02-19 22:07:32 133

原创 【Android】GridLayout实现等比布局

GridLayout是十年前的老布局了,因为太久没用过,导致细节方面已经记不太清楚了。初衷是想让GridLayout中每行每列的元素大小都相等,结果怎么试都没有效果。原来是要只设置比例,不设置宽高才行,特意记录下。需要满足以下几点,才能实现自动均分行列空间。

2024-02-05 14:51:30 627

原创 【机器学习】TensorFlowLite安装和模型训练

做AI这部分的开发,还是强烈建议装个Linux双系统或虚拟机。这些比折腾Windows和Mac上的移植环境要轻松得多。Linux,部分库不支持Apple芯片。

2024-01-19 19:58:48 640

原创 【Linux】Ubuntu安装搜狗中文输入法

设置 - 区域与语言 - 管理已安装的语言 - 添加汉语并置顶 - 输入法系统选择fcitx - 应用到整个系统。应用程序 - fcitx配置 - 输入法 - 添加搜狗并置顶。Shift切换中英文 Ctrl+Shift切换输入法。设置 - 键盘 - 输入源 - 添加汉语并置顶。

2024-01-18 09:11:28 473

原创 【Android】ObjectBox Duplicate Class 错误分析

debugImplementation + releaseImplementation + plugin + 多模块。debugImplementation是为方便调试,在调试时提供单独提供了一份可观测数据的代码。以上这几种特性共同使用时,可能会造成debug实现和release实现同时被打包进apk。如果不需要调试时的代码后门,也可以直接使用以下依赖。此时,apply plugin写在哪里都可以。以上代码必须写在gradle脚本的最后一行。如果有多个模块,每个模块都要写上这些依赖。

2024-01-17 16:10:58 642

原创 【Python】Python3和Pip3安装和指令教程

【代码】【Python】Python3和Pip3安装和指令教程

2024-01-13 11:32:17 461

原创 【Mac】HomeBrew安装与使用

HomeBrew是Mac上的Package管理工具。

2024-01-11 15:01:33 342

原创 【RxJava】RxJava单次订阅,onNext后自动解除订阅

每次订阅会产生一个Disposable对象,可以通过在onNext执行完毕后销毁该对象,来达到单次订阅效果。多次订阅该Observable,但希望接收一次Observable数据后,就停止继续接收。在订阅时,可以通过自定义Observer的方式,来控制Disposable。为了简化代码,可以封装一个专门的Observer类,来实现此类功能。有一个Observable一直存在,会不停发送数据。

2024-01-08 17:58:17 367

原创 validator verification predictor 区别

verification 验证是不是某个事物。validator 验证事物具体特点符不符合。predictor 预测可能是哪些事物。

2023-12-31 13:53:13 347

原创 【版本管理】git stash用法

git stash apply stash@{0} 应用指定的缓存记录到当前分支,但不删除该记录,这样后续还可以应用到其它分支。此时可以在切换到B分支前,先通过stash指令来缓存本地改动,等切回A分支时,再通过stash还原改动。git stash pop 应用最近一次缓存的改动到当前分支,并删除该记录。git stash drop stash@{0} 删除指定的缓存记录。想从A分支切换到B分支,但A分支尚未改完,暂时不想提交代码。stash指令主要用于缓存和还原本地改动,用法如下。

2023-12-19 16:16:48 393

原创 【Android】Hilt比Android好在哪里

Hilt框架的功能和设计理念,和Dagger基本是完全一致的,Hilt也是完全在Dagger基础上进行开发的。但是Dagger的用法比较繁琐,Hilt主要是做了便用性上的改进,主要有以下点。

2023-11-21 19:14:25 354

原创 【Android】Dagger2 通过 AndroidInjector 简化模版代码

前面我们已经详细讲解过,如何通过 Component 和 Module 向 Activity 注入对象这是基本的使用方法,它的缺点是当 Activity 特别多时,就需要非常多的 Component 和 Module 类现在我们来讲解,如何通过 AndroidInjector 向基类进行统一注入。

2023-11-15 09:59:30 371

原创 【Android】Dagger2 框架设计理念和使用方式详解

现在我们已经知道,可以通过@Singleton来实现全局单例那么如果我们想在实现在某个类里面单例共享,不同类之间允许多例,要怎么做呢我们可以通过 Dagger 的自定义 Scope 特性来实现这个目标,步骤如下首先,自定义一个注解,表示被标记的类在里面是单例共享的Retention;Scope;@Scope实际上,@Singleton和一样,只是一个被@Scope标记的自定义注解,用来标记单例作用域的下一步,指定 Component 的作用域。

2023-11-08 09:53:07 422

原创 【Android】Lombok for Android Studio 离线插件

File - Settings - Plugins - 设置按钮 - Install Plugin from Disk - 选择插件包。

2023-11-07 22:42:55 1092

原创 【Android】Debug时禁用主线程ANR限制

ANR全称Application Not Response,指主线程超过5s无响应,应用会自动退出。这样调试起来会非常麻烦,其实对于Debug应用,是可以临时禁用ANR限制的,方法如下。由于这个线程,如果我们给主线程加了断点,就会触发ANR,导致调试时应用退出。

2023-11-07 15:18:49 302

原创 【Java】Java中的引用类型

通过new直接创建的对象,只要该对象还可以被其它对象使用或访问到,就不会被回收。

2023-11-01 22:55:39 597

原创 【RxJava】map过程中各个Observable生命周期分析

发生异常时,所有的OnSubscribe都会执行发生异常时,所有的OnFinally都会执行发生异常时,所有的OnComplete都不会执行发生异常时,后续的OnError都会执行发生异常时,后续的OnNext都不会执行发生异常时,后续的Function都不会执行。

2023-11-01 12:26:22 1197 8

原创 当catch或finally内部发生异常

我们都知道,try-catch-finally块是用来处理异常的,finally块正常会在try块或catch块执行完毕后执行但是如果catch块内部再发生异常呢,finally块还能不能正常执行如果finally块内部也发生异常呢,会发生什么。

2023-11-01 11:53:20 420 4

原创 Git工作原理和常见问题处理方案

在单人开发、单版本开发的情景下,Git的版本记录是一个链表结构,版本要么新增,要么回退在多人开发、多个子功能同时开发、不同版本之间需要进行功能合并的情景下,链表结构的版本管理便无法再满足需求于是便诞生了树结构的版本管理方式,版本号允许新开分支进行单独的版本管理,而不影响主分支版本需要合并不同分支功能的时候,允许不同分支之间进行代码合并。

2023-10-31 10:45:35 261 1

原创 【Android】Handler为什么会造成内存泄漏

而ThreadLocal是一个static final变量,它是GC Root节点,永远不会被释放。比如我们在Activity中通过以下方式创建Handler。所以被其间接引用的Activity,也不会被释放。那么,Handler将持有Activity。在java中,匿名内部类会持有外部类引用。首先,要明确一个知识点。

2023-09-19 11:47:30 262

原创 【Java】什么是GC Root节点

GC Root节点是指在JVM中永远存活,不会被释放的对象。被GC Root节点直接或间接引用的对象,是不能被释放的。不被任何GC Root节点引用的对象,则可以被释放。GC Root节点包含以下几类。

2023-09-19 11:33:16 166

原创 【Android】性能优化方案汇总

Fragment等多页布局,页面展示时再初始化,不要一次性初始化(加快UI启动速度)用启动图片作为背景,取代默认的白色空白出口(让启动在视觉上看起来更流畅)将消耗大的工作放到子线程中初始化,并降低线程优先级(减轻UI线程压力)监测网络请求(Profiler、Wireshark、Fiddler)利用闪屏页面的展示时间处理初始化工作(让启动在视觉上看起来更流畅)布局延迟加载(可以使用ViewStub占位,需要时再加载)图片压缩(可通过tinypng网站在线压缩)将不紧急的工作延时执行(加快UI启动速度)

2023-09-06 18:18:14 178

原创 【Android】ARouter新手快速入门

ARouter的核心功能在于,它以路径访问的方式,来取代类直接访问的方式,来实现界面跳转功能,从而达到了模块间代码解耦的目的。在大型的模块化项目中,一个模块,往往无法直接访问到其它模块中的类,必须通过其它方式来完成模块间的调用。ARouter提供了一个服务类,允许我们在跳转前,做一些预处理工作。注意,这个预处理服务是对所有跳转任务都有效的,无关path。ARouter允许根据实现类的路径,自动装载一个接口实例。也可以通过ARouter直接实例化一个对象。通过以下链接,就可以直接访问对应的组件。

2023-08-31 16:41:26 531

原创 【Android】模块化方案

这个接口定义大业务从哪个界面开始启动,启动前要创建哪些资源,如何退出模块,退出时要销毁哪些资源。业务规范模块:负责登录,升级,定位,权限申请等单个子业务。当业务比较复杂时,该模块只定义接口规范,不负责具体实现。大业务模块:负责公司某个具体方向的大业务。业务配置模块:配置启用哪些业务模块,选择哪种业务方案。主模块:一个套壳模块,什么都不做,根据配置模块决定启动后哪个大业务模块。通用技术模块:负责网络通信,事件订阅发布,常用控件等通用技术方案。定制技术模块:负责播放器,视频通话,表格读写等定制技术方案。

2023-08-28 20:29:37 183

原创 【Android】JUnit和Espresso单元测试新手快速入门

Android单元测试,特别是Espresso框架,依赖于Gradle插件和SDK版本。Gradle插件版本不兼容,SDK版本不兼容,手机不支持时,单元测试都可能会执行失败。测试任务执行完毕,会在app/build/reports目录下生成测试报告。点击被Test标注的方法,左侧的运行按钮,就可以执行测试任务。点击被Test标注的方法,左侧的运行按钮,就可以执行测试任务。可能会遇到的意外比较多,如果不幸遇坑,需要靠自己去耐心尝试。报告会统计所有测试任务的执行结果,已经通过率。

2023-08-23 17:44:54 621

原创 【版本管理】Git新手快速入门

下载和安装GitHub Desktop(这个是GitHub官方的桌面客户端,但也支持任意标准的Git仓库)打开Gitee官网,https://gitee.com,注册账号,绑定手机和微信(方便以后使用)网上的教程,讲了太多高级用法和设计理念,反而把最基本的东西搞复杂了。其实Git本身是个非常简单的东西,大家平时用的主要都是其核心功能。点击Fetch Origin,将在线仓库代码拉到本地。点击Push Origin,将本地改动提交到在线仓库。编辑.gitignore配置文件,设置要忽略的文件。

2023-08-17 17:00:44 157

原创 【Android】Room新手快速入门

它类似于GreenDao,但比GreenDao更加简洁高效,是官方推荐使用的数据库框架。Room是Google推出的一款android平台上的ORM数据库框架。

2023-08-16 23:02:11 383

glide加载和下载svg矢量图片

glide加载和下载svg矢量图片

2024-04-02

android-color-picker.zip

kotlin编写的安卓拾色器,功能非常完善,代码简洁清晰

2024-02-04

nmview.zip-so库函数签名查看工具.zip

可以查看so库包含哪些函数,指令格式 cd <命令行所在目录> ./nmview -D --defined-only ./<so文件名称>

2023-12-23

android-room.zip

Room使用方法演示Demo,代码简洁规范,是个很好的学习资源

2023-11-23

android-couchbase.zip

couchbase-lite-android使用方法Demo

2023-11-20

Android Hilt 框架完整用法演示.zip

Android Hilt 框架完整用法演示.zip

2023-11-16

Dagger2通过AndroidInjector统一注入依赖.zip

Dagger2进阶用法,不用再创建大量的Component和Module

2023-11-15

Dagger2完整用法Demo.zip

介绍了Dagger2的各种用法,非常全面。对应的讲解博客: https://blog.csdn.net/u013718730/article/details/134281830

2023-11-08

tensor-flow-lite-android-handwritten-digit-classifier.zip

这是一个利用TensorFlow进行数字手写识别的演示APP 主要介绍TensorFlow模型在安卓端的使用方式 里面的document有完整讲解如何进行模型格式转换,模型训练,调用模型进行识别

2023-11-01

android手写识别SDK

Google ML Kit 子组件 Ink Recognition

2023-10-30

ObjectBox.zip

ObjectBox配置和基本使用

2023-09-28

android-platform-tools-33.0.0.zip

旧版本platform-tools,包含systrace

2023-09-06

demo-mvvm.zip

android mvvm demo

2023-08-09

ViewBinding+DataBinding+MVVM.zip

一个简单的Demo,供新手快速入门ViewBinding+DataBinding+MVVM

2023-08-09

ONVIF20协议中文原版.zip

ONVIF20协议中文原版.doc

2022-12-30

msys2编译ffmpeg完整环境.zip

可以在windows下编译出ffmpeg的dll库和lib库,包含全部环境

2022-11-11

OpenSSL-Win64-3.0.7.zip

OpenSSL-Win64-3.0.7.zip

2022-11-08

pkg-config-0.23 Win32+Win64

已经编译的exe程序,适合windows上使用,可配合msys2进行交叉编译

2022-11-08

iperf3 win64+android.zip

windows端和android端网速测试工具

2022-11-01

AndServer实现文件下载+文件浏览服务

AndServer实现文件下载+文件浏览服务

2022-10-31

commons-codec-android-1.15

android定制版的commons-codec,可以在android中使用apache的Base64等功能

2022-09-27

webrtc-m89-android.7z

2021年最新官方WebRTC源码,包含最新的libgingle库 适合有WebRTC开发经验,需要更新库版本的朋友使用 本代码实测可用,但并不提供完整工程和服务端,不适合伸手党使用

2022-04-26

阿里VLayout.zip

以淘宝首页为例,介绍阿里VirtualLayout库的使用方法

2022-04-09

Android自定义FlowLayoutManager

Android自定义FlowLayoutManager

2022-04-06

CoordinatorLayout源码解析和手动实现.zip

CoordinatorLayout源码解析和手动实现.zip

2022-03-31

海康网络SDK-Android

海康网络SDK-Android,主要简化了初始化,登录,布警,获取报警事件和图片等功能

2022-03-30

带橡皮筋效果的RecyclerView

控件可以像橡皮筋一样,内容越拉越长,松手时恢复到正常状态

2022-03-05

带回弹效果的ScrollView

弹性滚动控件,拉到顶部和底部时,仍可以继续拉出一部分空白区域,然后弹回去

2022-03-02

安卓RecyclerView通过ItemTouchHelper实现侧滑拖拽功能

源码解析,手动实现

2022-02-25

Apache POI for Android

适用于安卓的Excel读写库,简单易用

2022-02-24

NDK CMakeList 模版工程

一个非常简单的例子,演示如何通过CMakeList来直接运行cpp代码

2022-02-16

Android CH34X串口转USB.zip

Android CH34X串口转USB.zip

2022-02-11

安卓读写串口,用于SerialPort数据通信

安卓读写串口,用于SerialPort数据通信

2022-02-11

安卓读写GPIO,用于对硬件IO口进行读写

安卓读写GPIO,用于对硬件IO口进行读写

2022-02-10

CH34xMultiUART.zip

转换器驱动,适用于安卓设备,USB转串口,转换器型号为CH340/CH341。压缩包内包含了Jar包和示例代码,代码很简洁,包括设备查找、配置、读写。支持多个USB或多个串口设备同时连接

2022-01-08

ONVIF JAVA SDK.zip

SDK包含ONVIF协议的全部功能,但Demo里面只演示了核心功能。如果想实现复杂功能,还是需要自己去理解下代码。其实ONVIF本身就是UDP+HTTP+XML,技术并不复杂,只是字段比较繁琐,大家努力下自己都是可以实现的

2021-12-18

GBK2UTF8.zip

将GBK编码的工程,转为UTF8编码的工程

2021-12-16

IconFont for Android.zip

在安卓上使用阿里的IconFont图标库,有TextView和Drawable两种使用方式,支持渐变、描边、阴影、大小设置

2021-12-14

ONVIF ANDROID SDK.zip

支持设备查找,设备信息查询,设备控制,取流推流等全部功能

2021-12-11

ONVIF协议.zip

网络摄像头通用通信协议

2021-12-09

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除