- 博客(102)
- 资源 (8)
- 收藏
- 关注
原创 Rasa中文聊天机器人开发指南(3):Core篇
文章目录1. 对话管理1.1 多轮对话1.2 对话管理2. Rasa Core2.1 Stories2.2 Domain2.3 Responses2.4 Actions2.5 Policies2.6 Slots2.6.1 Slots Type2.6.2 Slots Set2.6.3 Slots Get2.7 Form2.8 Interactive Learning3. 改进ChitChatAssi...
2020-04-10 15:30:46 16189 53
原创 Rasa中文聊天机器人开发指南(2):NLU篇
文章目录1. 什么是NLU2. NLU训练数据2.1 NLU样本格式2.2 验证数据有效性2.2.1 使用命令2.2.2 使用代码2. Rasa NLU Components2.1 词向量资源(Word Vector Sources)2.1.1 MitieNLP2.1.2 SpacyNLP2.2 分词(Tokenizers)2.2.1 WhitespaceTokenizer2.2.2 Jieb...
2020-02-27 10:28:46 24639 26
原创 Rasa中文聊天机器人开发指南(1):入门篇
文章目录1. Rasa简介与安装1.1 Rasa简介1.2 Rasa安装(v1.7.0)1.1 Ubuntu 16.04环境1.2 Windows10环境2. Rasa使用--构建简单聊天机器人2.1 构建NLU样本2.1.1 nlu.md2.2 构建Core样本2.2.1 stories.md2.2.2 domain.yml2.3 训练NLU和CORE模型2.3.1 config.yml2.3....
2020-02-15 17:08:01 47962 164
原创 Android直播开发之旅(10):AndroidUSBCamera,UVCCamera开发通用库(支持开启多路摄像头)
AndroidUSBCamera基于[saki4510t/UVCCamera](https://github.com/saki4510t/UVCCamera)开发,该项目对USB Camera(UVC设备)的使用和视频数据采集进行了高度封装,能够帮助开发者通过几个简单的API实现USB Camera设备的检测、连接、预览和音视频数据采集,最重要的是手机无需root,只需支持otg功能即可驱.........
2017-10-23 22:22:09 84027 852
原创 AUSBC3.0, 震撼来袭!(UVC Camera,支持开启多路摄像头)
Android平台上灵活实用的UVC摄像头引擎,无需任何系统权限即可轻松打开您的uvc摄像头。 您唯一应该做的就是确认您的 Android 设备必须支持 OTG 功能。 所以,欢迎使用AUSBC3.0,欢迎star & fork & issues!支持在Android 4.4~11开启camera1、camera2和uvc camera;支持预览480p、720p、1080p等;支持使用 OpenGL ES 2.0 添加效果;支持抓图()、视频(//)和音频(//)支持旋转相机视图;支持在屏幕外显示相机;
2022-07-01 10:56:47 6098 23
原创 路由框架ARouter的使用与原理分析
Arouter简介 ARouter是阿里开源的一款路由框架,为组件化提供解决方案,它支持解析标准URL进行跳转,并自动注入参数到目标页面中;支持添加多个拦截器,自定义拦截顺序。所谓组件化就是将APP按照一定的功能和业务拆分成多个小组件,不同的组件由不同的开发小组来负责,这样就可以解决大型APP开发过程中的开发与协作的问题,将这些问题分散到小的APP中。(1)原生路由方案:使用显示Intent和隐式Intent跳转显示Intent存在直接依赖,耦合度过高;隐式Intent存在规则集中式管理Path
2021-04-21 20:07:47 1217
原创 网络请求框架OkHttp4的使用与原理解析01:任务调度与拦截器分析
OkHttp任务调度流程:1. OkHttpClient构建过程分析案例:OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new CustomInterceptor()) .cache(new Cache(cacheDir, cacheSize)) .readTimeout(1000, TimeUnit.MILLISECONDS) .writeTimeout(1000,
2021-04-21 20:03:52 1234
原创 网络调度框架Retrofit2的使用与原理解析
Retrofit是squareup公司的开源力作,和同属squareup公司开源的OkHttp,一个负责网络调度,一个负责网络执行,为Android开发者提供了即方便又高效的网络访问框架。Retrofit并不做网络请求,只是生成一个能做网络请求的对象,同时能够灵活的支持功能扩展,如自定义拦截器、网络请求适配器、数据转换适配器。1. Retrofit实例构建过程分析案例:Retrofit retrofit = new Retrofit.Builder() .baseUr
2021-04-21 20:00:02 860
原创 Jetpack框架探究03:ViewModel组件的使用与源码分析
ViewModel 具备宿主生命后期感知能力的数据存储组件,使用 ViewModel 保存的数据,在页面因配置变更导致页面销毁重建之后依然也是存在的,其中配置变更主要是指横竖屏切换、分辨率调整、权限变更、系统字体样式变更。ViewModel 的优势:页面更改数据不丢失 当设备因配置更改导致 Activity/Fragment 重建,ViewModel 中的数据并不会因此而丢失,配合 LiveData 可以在页面重建后立马能收到最新保存的数据用以重新渲染页面。生命周期感应 在 View
2021-04-12 19:51:42 4183 1
原创 Jetpack框架探究02:LiveData组件的使用与源码分析
总目录Jetpack框架探究01:Lifecycle组件的使用与源码分析Jetpack框架探究02:LiveData组件的使用与源码分析Jetpack框架探究03:ViewModel组件的使用与源码分析Jetpack框架探究04:Room组件的使用与源码分析Jetpack框架探究05:WorkerManager组件的使用与源码分析1. LiveData简介1.1 LiveData基本使用 LiveData是JetPack提供的基于观察者的消息订阅/分发组件,是一种可观察的数据存储器类,同时它
2021-01-21 20:25:48 499
原创 Jetpack框架探究01:Lifecycle组件的使用与源码分析
1. Lifecycle简介 Lifecycle是Android Jetpack框架提供的能够感知组件(宿主)生命周期变化的组件,它能持有宿主(如Activity或Fragment)生命周期状态的信息,并且允许其他观察者注册监听宿主的生命周期状态变化,这就使得我们不用主动去获取宿主的状态,有利于降低代码耦合度并更容易维护。Lifecycle是JetPack组件库的核心基础,很多其他的Jetpack组件,比如LiveData、ViewMoedel等,都是基于它实现的。1.1 Lifecycle基本使用
2021-01-09 20:40:23 6352 10
原创 LearnOpenGL从入门到入魔(3):绘制纹理
总目录LearnOpenGL从入门到入魔(1):OpenGL简介LearnOpenGL从入门到入魔(2):绘制2D图形LearnOpenGL从入门到入魔(3):绘制纹理LearnOpenGL从入门到入魔(4):绘制3D图形LearnOpenGL从入门到入魔(5):简单滤镜效果LearnOpenGL从入门到入魔(6):光照(光照基础,材质)LearnOpenGL从入门到入魔(7):光照(光照贴图,投光物)1. GLSL GLSL,OpenGL Shader Language缩写,即OpenG
2020-12-31 14:59:45 1628
原创 LearnOpenGL从入门到入魔(2):绘制2D图形
总目录LearnOpenGL从入门到入魔(1):什么是OpenGL?LearnOpenGL从入门到入魔(2):如何使用OpenGL?LearnOpenGL从入门到入魔(3):着色器语言和坐标系统LearnOpenGL从入门到入魔(4):光照(光照基础,材质)LearnOpenGL从入门到入魔(5):光照(光照贴图,投光物)1. OpenGL基本概念1.1 图像渲染管线 在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变
2020-12-21 14:18:53 4875 6
原创 LearnOpenGL从入门到入魔(1):OpenGL简介
总目录LearnOpenGL从入门到入魔(1):OpenGL简介与环境搭建LearnOpenGL从入门到入魔(2):OpenGL基本使用LearnOpenGL从入门到入魔(3):着色器,纹理LearnOpenGL从入门到入魔(4):坐标系统,摄像机LearnOpenGL从入门到入魔(5):光照(光照基础,材质)LearnOpenGL从入门到入魔(6):光照(光照贴图,投光物)1. OpenGL简介 OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Speci
2020-12-10 14:43:08 3891
原创 Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
总目录Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数)Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常)Flutter开发指南之理论篇:Dart语法03(类,泛型)Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate) Dart是一门面向对象语言,它针对web 和移动设备开发进行了优化,主要特点为:一切皆对象!无论是数字,函数还是null
2020-12-07 23:49:43 10570 2
原创 Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)
总目录Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数)Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常)Flutter开发指南之理论篇:Dart语法03(类,泛型)Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式)Flutter开发指南之理论篇:Dart语法05(消息循环模型) Dart是一门面向对象语言,它针对web 和移动设备开发进行了优化,主要特点为:一切皆对象!无论是数字,函数还是null,所有对象继承自Object
2020-12-02 22:52:21 1494
原创 Flutter开发指南之理论篇:Dart语法03(类,泛型)
总目录Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数)Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常)Flutter开发指南之理论篇:Dart语法03(类,泛型)Flutter开发指南之理论篇:Dart语法04(库,异步,正则表达式) Dart是一门面向对象语言,它针对web 和移动设备开发进行了优化,主要特点为:一切皆对象!无论是数字,函数还是null,所有对象继承自Object类;声明一个变量时可以不指定具体类型,Dart可以自动推断类型;
2020-11-28 17:20:15 1394
原创 Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常)
总目录Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数)Flutter开发指南之理论篇:Dart语法02(运算符,循环,异常)Flutter开发指南之理论篇:Dart语法03(类,泛型)Flutter开发指南之理论篇:Dart语法04(正则表达式,异步库) Dart是一门面向对象语言,它针对web 和移动设备开发进行了优化,主要特点为:一切皆对象!无论是数字,函数还是null,所有对象继承自Object类;声明一个变量时可以不指定具体类型,Dart可以自动推断类型;
2020-11-26 19:54:47 835
原创 Flutter开发指南之理论篇:Dart语法01(数据类型,变量,函数)
Dart是一门面向对象语言,它针对web 和移动设备开发进行了优化,主要特点为:一切皆对象!无论是数字,函数还是null,所有对象继承自Object类;声明一个变量时可以不指定具体类型,Dart可以自动推断类型;Dart支持顶层函数,函数是一等对象,且函数可作为参数传递;Dart使用_开头表示私有属性,没有关键字public,protected和private;1. 数据类型 在Dart中,支持的数据类型有:Number,String,Boolean,List,Map,Set,Rune,这
2020-11-26 17:45:07 854
原创 Android直播开发之旅(25):使用AES算法加密多媒体文件(+RSA+MD5+Base64)
文章目录1. AES算法1.1 AES加密过程1.1.1 字节代替(SubBytes)1.1.2 行移位(ShiftRows)1.1.3 列混合(MixColumns)1.1.4 加轮密钥(AddRoundKey)1.2 AES加解密实现1.2.1 创建密钥1.2.2 AES加密1.2.3 AES解密1.3 AES与DES的对比2. RSA算法2.1 RSA算法原理2.2 RSA加解密实现2.2....
2020-02-12 18:06:44 4660
原创 从Android 8.0源码的角度剖析线程池原理
在计算机系统中,进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的基本单位,每个进程都拥有自己私有的地址空间,且进程之间是相互独立的。线程是操作系统调度的最小单位,它可以说是进程的组成部分,在一个进程中可以创建多个线程,这些线程都拥有各自计数器、堆栈和局部变量等属性,但是不再拥有系统资源,它与进程中的其他线程共享该进程所拥有的全部资源,或称共享内存变量。线程是独立运行的,且采用抢占...
2020-02-10 13:26:54 2647
原创 当Android遇上设计模式之观察者(Observer)模式
文章目录1. 观察者模式定义2. 观察者模式实现3. 观察者模式使用场景3.1 优点3.2 缺点3.3 使用场景1. 观察者模式定义 观察者模式又称发布-订阅模式,是行为型设计模式的一种,所谓行为型模式就是主要处理类或对象如何交互及如何分配职责。观察者模式经常在项目中被用到,它的定义为:定义对象间一种一对多的依赖关系,每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并自动被更新。观察者...
2020-02-01 20:18:54 3683
原创 当Android遇上设计模式之代理(Proxy)模式
文章目录1. 代理模式1.1 代码实现1.2 使用场景2. 静态代理与动态代理设计模式六大原则:单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性;开放封闭原则:类、模块、函数等应该是可以扩展的,但是不可修改。换句话说,就是面对需求的改变要尽可能地保证相对稳定,尽量通过扩展的方式而不是修改原有的代码来实现。里氏替换原则:所有引用基类(父类)的地方必须透明地使...
2020-01-31 21:25:33 5303 3
原创 当Android遇上设计模式之工厂方法(Factory)模式
文章目录1. 简单工厂模式2.1 定义2.2 代码实现2.3 使用场景2. 工厂方法模式2.1 定义2.2 代码实现2.3 使用场景设计模式六大原则:单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性;开放封闭原则:类、模块、函数等应该是可以扩展的,但是不可修改。换句话说,就是面对需求的改变要尽可能地保证相对稳定,尽量通过扩展的方式而不是修改原有的代码来实现。...
2020-01-31 15:27:19 3330
原创 当Android遇上设计模式之单例(Singleton)模式
文章目录1. 单例模式定义2. 单例模式实现2.1 饿汉模式2.2 懒汉模式2.3 双重检查模式(DCL)2.4 静态内部类单例模式2.5 枚举单例3. 单例模式的使用场景设计模式六大原则:单一职责原则:就一个类仅有一个引起它变化的原因,即类承担的职责单一性;开放封闭原则:类、模块、函数等应该是可以扩展的,但是不可修改。换句话说,就是面对需求的改变要尽可能地保证相对稳定,尽量通过扩...
2020-01-30 21:48:23 2575
原创 内存泄漏分析框架LeakCanary的使用与原理解析
文章目录1. 常见内存泄漏1.1 “单例模式” 造成的内存泄漏1.2 “静态实例” 造成内存泄漏1.3 “Handler” 造成的内存泄漏1.4 “线程” 造成的内存泄漏1.5 “使用WebView” 造成的内存泄漏2. LeakCanary使用与原理解析2.1 LeakCanary使用方法2.2 LeakCanary原理解析 在《Android性能优化(1):常见内存泄漏与优化(一)》和《An...
2020-01-12 21:52:16 13098 2
原创 2020,远征 ● 起航!(博客目录)
最近一段时间抽空对之前积累的一些知识点进行了总结、扩展,为了更便捷地查阅与相关知识点对应的文章,本文对本博客的现有的所有文章进行了归纳、汇总。具体章节如下:1. Android源码分析1. 从Android源码的角度剖析UI界面架构2. 从Android源码的角度剖析View的绘制原理3. 从Android源码的角度剖析Window内部机制原理4. 从Android源码的角度剖析Act...
2019-12-31 20:40:38 3427 2
原创 Android性能优化(6):浅析类加载机制与热修复技术
文章目录1. 类加载与反射1.1 类加载机制1.1.1 类加载器1.1.1.1 Java中的ClassLoader1.1.1.2 Android中的ClassLoader1.1.2 双亲委托模式1.1.3 ClassLoader的加载过程1.1.4 类的链接1.1.5 类的初始化1.2 Java反射机制2. 热修复技术2.1 热修复方案2.1.1 Tinker2.1.2 QZone超级补丁2.1...
2019-12-29 18:20:29 3509 1
原创 依赖注入框架ButterKnife的使用与原理解析
文章目录1. 注解与依赖注入1.1 注解1.1.1 注解分类1.1.2 注解处理器1.2 依赖注入2. ButterKnife框架2.1 ButterKnife的基本使用2.2 ButterKnife原理解析2.2.1 创建各类注解类2.2.2 ButterKnife的注解处理器2.2.3 ButterKnife的bind方法1. 注解与依赖注入1.1 注解 从JDK 5.0开始,Java增...
2019-12-27 15:50:37 6039 2
原创 事件总线框架EventBus的使用与原理解析
文章目录1. EventBus框架1.1 EventBus简介1.2 EventBus基本使用1.2.1 添加Gradle依赖1.2.2 定义事件1.2.3 准备订阅者1.2.4 发布事件2. EventBus原理解析2.1 订阅者注册过程2.2 订阅者注销过程2.3 事件发布过程3. EventBus性能优化 事件总线模式基于发布-订阅机制实现,它是一种集中式事件处理机制,允许不同的组件之间进...
2019-12-21 16:47:36 12991
原创 从Android 8.0源码的角度剖析APP的启动过程
文章目录1. 应用进程启动过程1.1 AMS向Zygote进程发起请求1.2 Zygote进程接受请求2. Activity启动过程2.1 应用程序的Appication启动过程2.2 应用程序的根Activity启动过程在从Android 8.0源码的角度剖析Android系统启动过程(2)一文中,我们了解到当ActivitiyManagerService服务被启动后,就会通过Intent以...
2019-12-14 02:20:32 7226 4
原创 Android性能优化(5):APK瘦身优化
文章目录1. APK文件结构2. APK瘦身优化2.1 优化dex文件大小2.1.1 Proguard2.1.2 AndResGuard2.2 优化资源文件大小2.2.1 Android Lint2.2.2 [tinypng](http://leonshi.com/2015/11/02/tinypng-compress/)2.2.3 WebP2.3 优化libs目录大小2.3.1 裁剪libs目录...
2019-12-10 21:49:01 3412
原创 从Android 8.0源码的角度剖析Android系统启动过程(2)
文章目录1. SystemServer进程1.1 启动Binder线程池1.2 启动系统服务1.2.1 启动Bootstrap(引导)服务1.2.2 启动Core(核心)服务1.2.3 启动Other(其他)服务2. Launcher进程在从Android 8.0源码的角度剖析Android系统启动过程(1)一文中,我们介绍了Android系统启动过程中的init进程和Zygote进程的启动流...
2019-12-06 23:36:11 1854
原创 从Android 8.0源码的角度剖析Android系统启动过程(1)
文章目录1. init进程启动过程1.1 解析init.rc文件1.2 启动Zygote进程2. Zygote进程启动过程2.1 启动SystemServer进程2.2 创建Zygote进程的Server socket 在《嵌入式Linux应用开发完全手册》一书中,我们可以较为清晰地了解到Android系统启动的大体流程:当用户按下Android设备的电源键时,CPU上电后会从0x0000000...
2019-12-05 10:27:33 2035
原创 从Android 8.0源码的角度剖析APK打包、安装过程
文章目录1. APK打包过程1.1 APK文件结构1.2 APK打包过程2. APK安装过程2.1 拷贝APK2.2 解析APK APK,全称Android Application Package,即Android应用程序包,是Android系统使用的一种应用程序包文件格式,它的作用是将Android程序和资源整合在一起,以便Android程序能在Android设备上正常运行。简单地说,就是一个...
2019-11-29 22:22:56 2678
原创 Android直播开发之旅(18):FFmpeg中滤镜(filter)的工作原理
文章目录1. 什么是滤镜1.1 简单滤镜(滤镜链)1.2 复杂滤镜(滤镜图)2. 滤镜API介绍与使用2.1 滤镜API介绍2.1.1 结构体2.1.2 功能函数2.2 滤镜API的使用2.2.1 配置滤镜图2.2.2 使用滤镜图1. 什么是滤镜 滤镜(filter)是指将未经过处理的原始音频帧(如PCM)或视频帧(如YUV、RGB)经过滤镜器处理后,得到具体“特殊效果”的音频帧或视频帧,比...
2019-11-21 14:54:36 3409 1
原创 Android性能优化(4):UI渲染机制以及优化
文章目录1. 渲染机制分析1.1 渲染机制1.2 卡顿现象1.3 内存抖动2. 渲染优化方式2.1 过度绘制优化2.1.1 Show GPU overdraw2.1.2 Profile GPU Rendering2.2 卡顿优化2.2.1 SysTrace2.2.2 TraceView在从Android 6.0源码的角度剖析View的绘制原理一文中,我们了解到View的绘制流程有三个步骤,即m...
2019-11-20 09:38:34 11403 4
原创 Android性能优化(2):常见内存泄漏与优化(二)
文章目录1. Android虚拟机:Dalvik和ART1.1 JVM与Dalvik区别1.2 Dalvik与ART区别1.3 Dalvik/ART的启动流程2. 常见内存分析工具2.1 Android Profiler2.1.1 Allocation Tracker2.1.2 Heap Dump2.2 MAT2.3 LeakCanary在Android性能优化(1):常见内存泄漏与优化(一...
2019-11-07 16:20:20 2806 6
原创 Android直播开发之旅(17):使用FFmpeg提取MP4中的H264和AAC
最近在开发中遇到了一个问题,即无法提取到MP4中H264流的关键帧进行处理,且保存到本地的AAC音频也无法正常播放。经过调试分析发现,这是由于解封装MP4得到的H264和AAC是ES流,它们缺失解码时必要的起始码/SPS/PPS和adts头。虽说在Android直播开发之旅(3):AAC编码格式分析与MP4文件封装一文中对MP4有过简单的介绍,但为了搞清楚这个问题的来龙去脉,本文的开始还是有必要...
2019-10-21 15:55:44 4928 4
原创 Android性能优化(1):常见内存泄漏与优化(一)
a众所周知,Java因其拥有独特的虚拟机(JVM)设计,使其成为一门跨平台、内存自动管理的高级开发语言。所谓跨平台,即"一次编译,多次运行",从而解决了不同平台由于编译器不同导致无法运行问题;所谓内存自动管理,即Java不像C/C++那样需要开发者来分配、释放内存,它拥有一套垃圾回收机制来管理内存,这套机制减轻了很多潜在的内存回收不当问题。然而,虽然Java的垃圾回收机制非常优秀,但当我们在写...
2019-10-09 18:01:47 2343 1
使用RecyclerView、CardView、SwipeRefreshLayout实现下拉刷新列表
2017-03-11
使用CollapsingToolbarLayout、Toolbar, CoordinatorLayout, AppBarLayout实现可折叠状态栏
2017-03-11
Android6.0新权限管理详解Demo
2016-12-28
AccessibilityService智能安装卸载APP
2016-12-06
探讨一种新型的双进程守护应用保活方法(双进程守护Demo)
2016-12-06
探讨一种新型的双进程守护应用保活方法(单进程守护Demo)
2016-12-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人