自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

命运之手

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

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

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

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

2023-11-21 19:14:25 281

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

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

2023-11-15 09:59:30 141

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

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

2023-11-08 09:53:07 150

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

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

2023-11-07 22:42:55 979

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

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

2023-11-07 15:18:49 127

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

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

2023-11-01 22:55:39 578

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

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

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

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

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

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

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

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

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

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

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

2023-09-19 11:47:30 250

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

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

2023-09-19 11:33:16 110

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

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

2023-09-06 18:18:14 154

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

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

2023-08-31 16:41:26 510

原创 【Android】模块化方案

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

2023-08-28 20:29:37 136

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

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

2023-08-23 17:44:54 555

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

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

2023-08-17 17:00:44 139

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

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

2023-08-16 23:02:11 366

原创 【Android】Dagger和Hilt新手快速入门

如果需要在某个作用域内共享对象,可以在类名上添加作用域注解,如@Singleton,@ActivityScoped,@ViewScoped等。如果希望注入对象,在其子组件中重新注入仍然生效,可以通过@Module注解定义一个专门的模块类。Module类中,Method上的作用域注解,和InstallIn指定的组件,范围必须对应。Module类中用于生产对象的方法,需要添加作用域注解,和@Provides注解。通过注解生成的方式,来取代手动创建对象的方式,来管理对象和其作用域。

2023-08-16 15:53:12 763

原创 【Android】MVC,MVP,MVVM三种架构模式的区别

MVP架构规定,Model层和View层不能直接通信,要通过Presenter层进行调度,这样就实现了Model层和View层的解耦。同时,MVP架构还规定,Model层、View层、Presenter层必须通过接口进行交互,这样就明确了每层的功能定位。MVP是接口化编程风格,而MVVM是响应式编程风格,它们是两种不同的东西,适合各自的场景,并不是好与坏,谁取代谁的关系。传统的代码架构模式,仅仅是对代码进行了分层,其中的C代表Controller,控制的意思。它主要在以下两方面进行了改进:解耦,接口化。

2023-08-10 16:32:56 799

原创 【Android】ViewBinding+DataBinding+MVVM新手快速上手

在Activity中,通过ViewModel订阅DataRepository处理结果,处理结果可以通过LiveData或RxJava来订阅。使用ViewBinding,需要在gradle脚本中开启ViewBinding特性,编译时会自动生成Layout对应的Binding对象。在xml中,通过layout标签+data标签+变量表达式的方式,来让控件与ViewModel中的值绑定。ViewModel是一个特殊的数值容器,它可以与布局中的控件进行双向绑定,从而实现数值自动同步。

2023-08-09 10:30:36 687

原创 【Android】Retrofit2和RxJava2新手快速上手

网上关于Retrofit2和RxJava2的博客特别多,但是内容特别复杂,一上来就讲解很高级的用法。所以这篇博客的主要目的,只是为了讲解一下核心用法,对于不求甚解的新手来说,看完基本已经够用了。因为博客本身是脱离具体应用环境的,很难通过文字把每个点讲得透彻,大可不必太过追求面面俱到。observeOn 指定接收事件的线程,这里是网络请求执行成功,处理回复数据的线程。subscribeOn 指定订阅事件的线程,这里是执行网络请求的线程。onSubscribe 事件被订阅,这里是即将开始执行网络请求。

2023-08-04 09:51:39 478

原创 【FFMPEG】AVFilter使用流程

为了实现⼀个滤波过程,可能会需要多个滤波器协同完成,即⼀个滤波器的输出可能会是另⼀个滤波器的输⼊,AVFilterLink的作⽤是串联两个相邻的滤波器实例,形成两个滤波器之间的通道。AVFilterPad 滤波器的输⼊输出端⼝,⼀个滤波器可以有多个输⼊以及多个输出端⼝,相邻滤波器之间是通过AVFilterLink来串联的,⽽位于AVFilterLink两端的分别就是前⼀个滤波器的输出端⼝以及后⼀个滤波器的输⼊端⼝。AVFilterGraph ⽤于统合这整个滤波过程的结构体。

2023-07-06 11:32:19 720

原创 【流媒体协议】RTMP和RTSP的区别

RTMP和RTSP都是常用的流媒体协议,支持推流和拉流。但是它们的特点不同,应用场景也不同。

2023-04-13 10:12:59 1362 1

原创 【FFMPEG】封装格式转换流程和核心代码

【代码】【FFMPEG】封装格式转换流程和核心代码。

2023-04-11 10:25:55 212

原创 【Java】【NIO】【04】通过SocketChannel读写Socket

【代码】【Java】【NIO】【04】通过SocketChannel读写Socket。

2023-03-25 14:58:25 254

原创 【Java】【NIO】【03】通过FileChannel读写文件

这里通过一个将文件src拷贝到文件dst的Demo,来延时FileChannel是如何进行读写的。

2023-03-24 11:54:34 201

原创 【Java】【NIO】【02】Buffer工作原理

mark:标记当前position所在位置,通过reset可以将position再次恢复到标记位置。Buffer的本质是对字节数组的一种封装,只是对字节数组增加了许多常用操作的API。下面讲解,Buffer是如何通过不同参数的组合,来实现不同的读写操作的。Buffer主要通过以下几个参数,来实现读写双向操作的。capacity:最大容量,初始化时指定的数组长度。position:读写数据的起始位置。limit:数据访问的最大位置。

2023-03-24 11:51:01 233

原创 【Java】【NIO】【01】NIO设计理念

它是Java1.4之后推出来的一套非阻塞式IO接口,用于解决高并发,提升IO性能。NIO中的N,既有New的含义,也有Non-blocking的含义。NIO主要的改变在于以下几点。

2023-03-24 10:09:12 112

原创 【Java】Stream使用方式详解

【Java】Stream使用方式详解

2023-03-22 16:23:15 119

原创 【FFMPEG】av_samples_alloc_array_and_samples函数解析

linesize,输出参数,单帧数据最大的字节数,linesize=通道数×每个通道的样本数×采样深度。该函数用于开辟一块内存,用于存储单帧的音频数据,参数作用主要如下。audio_data,输出参数,分配的内存空间。nb_samples,每帧样本数。nb_channels,通道数。sample_fmt,样本格式。align,字节对齐,填0即可。

2023-01-07 18:03:16 572

原创 【并发编程】java.util.concurrent包下的并发类详解

CAS机制在更新数值前,先判断当前值有没有发生变化,如果数值发生了改变,则放弃当前操作,重新再尝试一次。再检查数据版本号,判断读取时数据是否被修改,如果被修改则使用悲观读的方式,加锁重新读取。数据版本号机制是在硬件层面实现的,它能绝对保证操作的原子性,不会因为代码并发而出现错误。这些类的API,可以保证数值的获取和自增操作是原子性的,不会因为并发而出现非预期的结果。ReadWriteLock在读的过程中,是不允许写操作的,是一种悲观锁。允许同时读,但写的过程中,不允许其它线程读或写。

2023-01-06 09:37:28 584

原创 【FFMPEG】AVERROR(EAGAIN)含义

继续调用avcodec_send_packet发送数据,直到解码数据足够为止。而是代表解码数据不足,需要提供更多的AVPacket才能解码出数据。这是一个常见的错误码,它实际上并不是真的报错。

2022-12-21 14:33:15 1196

原创 【C++】std库实现线程休眠

【代码】【C++】std库实现线程休眠。

2022-12-20 14:48:43 479

原创 【C++】将非数值类型按数值打印

要将非数字类型,按照其对应的二进制数值打印,只需要在该变量前面加上一个+号即可。

2022-12-15 11:12:56 329

原创 【后台定位】Android13后台定位方案

这个每个型号的手机,就都有所不同了,但整体上都围绕下面几个方面,只能靠大家去摸索了。一些特殊功能都有了自己的方案,虽然操作起来比较麻烦,但总算是有比较统一的方法了。在一些比较宽松的手机上,已经足够保证程序在一段时间内,能够在后台获取定位了。服务只有以前台服务的形式进行启动,才能在应用切换到后台后,继续进行定位。但不少第三方的系统,为了节约电量和性能,还必须额外进行一些保活设置。这里我们要前台定位和后台定位权限一起申请,并且将前台权限放在前面。到此为此,我们已经完成了所有必要的设置。

2022-12-14 18:29:11 3447

原创 【C++】Dll的Release版本和Debug版本不能混用

std::string和std::vector,在release和debug下的实现方式是不同的,内存使用情况也不一致。在Release模式下,程序可以正常运行,在Debug模式下,程序报内存错误,可能会出现以下两种错误。如果debug版本的exe,使用了release版本的dll,则有可能导致内存错误。因此,如果dll使用了std库,则必须保证dll和exe是使用相同规则编译出来的。C语言确实有很多比较麻烦的地方,大家只能靠经验去解决。

2022-11-27 10:34:40 1349

原创 【FFMPEG】从视频文件中抽取h264数据写成文件

这篇博客主要记录的是。

2022-11-24 12:49:20 1149

原创 【FFMPEG】从视频文件中抽取aac数据写成文件

这篇博客主要记录的是。

2022-11-22 06:57:35 429

原创 【FFMPEG】从文件中读取AVPacket

这篇博客主要记录的是。

2022-11-21 06:23:20 403

原创 【C++】指针什么时候必须delete,什么时候可以不delete

栈中的变量,是由程序自动进行管理的,当变量作用域结束后,程序就会自动释放,因此其内存区域不需要手动delete。所以,栈和堆的设计,是为了保证程序调度能高效的进行,像函数调用这种,在程序中是无时不刻都在进行的,必须保证效率。除了存放大型数据,堆的另一个作用,是可以数据共享,多个函数中的指针,可以访问同一份数据。堆和指针的设计,就是为了把栈中不必要的数据,单独放到一个垃圾堆中去,从而保证栈的高效。像数组,大的内存区域,复杂对象,我们则会通过new或malloc的方式,存到堆内存中。

2022-11-20 17:49:29 2707

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

SignAPK.jar+6.0.1官方系统签名

SignAPK.jar+6.0.1官方系统签名

2021-11-26

Android实现阴影效果.zip

通过ShadowLayer和BlurMaskFilter实现阴影效果

2021-11-17

PathMeasure在动画中的应用.zip

PathMeasure在动画中的应用.zip

2021-11-14

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

TA关注的人

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