自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 音视频基础概念

1 声音的物理性质声音是波。声音是由物体震动而产生的,声音的三要素声波的三要素是 频率、振幅和波形。频率代表音阶的高低。振幅代表响度。波形代表音色。频率越高、波长越短,低频波长、容易绕过障碍物。响度就是能量大小的反馈。分贝来描述响度频率和振幅影响音色。频率范围 20HZ~20KHz。2 数字音频为了将模拟信号数字化,需要进行采样、量化和编码。采样是在时间轴上对信号进行数字话。需要对最高频率的2倍进行采样(采样定律)量化:是在幅度轴上面进行对信号的数字话。例如16进制表示一个采样编码

2020-12-15 14:21:57 287

原创 音视频文件 mp4格式

MP4简介在互联网常见的格式中,跨平台最好的应该是MP4文件,因为MP4文件既可以在PC平台FlashPlayer中播放,也可以在Android iOS等平台中播放,1.1 概述MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表MP4文件中的所有数据都装在box(QuickTime中为atom)中,也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,这种box称为container box。一个MP4文件首先

2020-12-14 14:58:21 1133

原创 mac环境下编译FFmpeg

简介学习FFmpeg避免不了要学习。ffmpeg和ffmprobe两个核心的可执行程序,而应用在移动端必不可少的需要编译成Android可以使用的so库。本文主要介绍在mac上的FFmpeg的编译分为两部分编译为mac环境编译为Android so库1 FFmpeg编译为mac环境如果没有安装yasm的话,会报FFmpeg yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild1.1.1 下载YASM

2020-12-11 17:31:38 500

原创 FFmpeg简介

1.1 FFmpeg的定义FFmpeg是音视频编解码工具。也是一组音视频编码开发套件,它为开发者提供丰富的音视频处理的调用接口。FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换等;FFmpeg 提供了多种丰富的插件模块,包含封装和解封装的插件、编码与解码的插件等。1.2 FFmpeg历史很牛的。1.3 FFmpeg的基本组成FFmpeg框架的基本组成包含了。AVFormat、AVcode、AvFilter、AVDevice、AV

2020-12-10 11:05:44 1663

原创 flutter 中overlay

Overlay 简介overlay官方介绍:Overlay 以浮层的方式管理单独的 item 存储在栈中(后进先出);Overlay 其源码也是采用的 Stack 浮层,将 OverEntry 逐个加入到 Overlay 中进行展示,OverEntry 可以使用 Positioned 或 AnimatedPositioned 在 Overlay 中定义自身的位置;使用//获取实例OverlayState overlayState = Overlay.of(_context);//创建Overl

2020-10-10 17:39:25 1313

原创 Android 架构组件之 ViewModel 详解

ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存Android 框架可以管理界面控制器(如 Activity 和 Fragment)的生命周期。Android 框架可能会决定销毁或重新创建界面控制器,以响应完全不受您控制的某些用户操作或设备事件。如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity

2020-10-10 17:38:50 2698

原创 Android 架构组件之 LiveData详解

LiveData 概览LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。LiveData 只会将更新通知给活跃的观察者。为

2020-08-24 10:21:23 413

原创 Android 架构组件之 LifeCycle详解

使用生命周期感知型组件处理生命周期生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。一种常见的模式是在 Activity 和 Fragment 的生命周期方法中实现依赖组件的操作。但是,这种模式会导致代码条理性很差而且会扩散错误。通过使用生命周期感知型组件,您可以将依赖组件的代码从生命周期方法移入组件本身中。androidx.lifecycle 软件包提供了可用于构建生命

2020-08-21 17:41:55 883

原创 flutter shared_preferences的第一次获取不到值

在flutter 集成到Android原生项目的时候 集成了shared_preferences: 0.5.8,但是这个控件有问题。在获取原生传递过来的值,并保存在本地。获取的时候 获取不到,如下图但是第二次就获取到了。解决方案,怀疑是flutter存储和native村粗的值冲突,但是看了源码发现存储的时候key加了前缀,所以不是这个问题,解决方案:在次之前再获取一次,也就是写两句第一次获取的代码...

2020-08-11 17:43:57 1356

原创 Android中view绘制常用知识

Paint画笔,保存了绘制几何图形、文本和位图的样式和颜色信息常用API常用API主要如颜色,效果和文本相关等mPaint = new Paint(); //初始化mPaint.setColor(Color.RED);// 设置颜色mPaint.setARGB(255, 255, 255, 0); // 设置 Paint对象颜色,范围为0~255mPaint.setAlpha(200...

2020-08-07 18:23:49 156

原创 flutter中 实现类似Android OnResume功能

在Android中 页面从栈里面回到前台显示 有固定的生命周期方法 onReume(),虽然在flutter也有widget生命周期方法,但是功能和onResume()方法相差比较大,并不能监听路由栈回退。但是往往我们需要在页面再次可见的时候在生命周期中做数据的刷新,flutter并没有封装好的生命周期方法给我们使用,很尴尬。利用NavigatorObserver、strean流和mixin撸一个吧直接撸代码吧//工具类class RouteInfo { Route currentRoute;

2020-08-07 17:58:46 2055 1

原创 Flutter Wrap

构造direction: 主轴方向,默认是水平方向alignment:主轴方向对其方式,默认是startspacing :主轴方向上的间距runAlignment:run的对齐方式。run可以理解为新的行或者列,如果是水平方向布局的话,run可以理解为新的一行runSpacing:run的间距crossAxisAlignment :交叉轴(crossAxis)方向上的对齐方式textDirection :文本方向verticalDirection:定义了children摆放顺序,默认是d

2020-08-04 15:30:56 146

原创 flutter 打包成aar

简介公司app的客服系统是用flutter 来实现的,最开始我是使用flutter module的方式继承到Android 原生项目中的,但是这种方式侵入性比较强,大家都得得配置flutter 环境,所以就去踩了踩 flutter 打成aar的坑,坑一:flutter 版本的坑。可能是flutter 版本的问题,不管是flutter application 还是flutter module我都无法创建aar坑二:com.kezong.fat-aar,flutter module 中依赖的三方库可以依赖

2020-08-04 15:29:47 2860 1

原创 Dart语言中常量final和const关键字

使用过程中从来不会被修改的变量, 可以使用 final 或 const, 而不是 var 或者其他类型, Final 变量的值只能被设置一次; Const 变量在编译时就已经固定 (Const 变量 是隐式 Final 的类型.) 最高级 final 变量或类变量在第一次使用时被初始化。编译时常量,就是它的值在编译时就能确定的常量,不是等到运行时才确定。运行时常量,就是在它的值在程序运行时才能确定。const是编译时常量,final就是运行时常量。区别在哪儿呢?const修饰的常量必须在声明时初始

2020-07-21 15:33:24 246

原创 flutter Notification分析

前面提到InheritedWidget,它可以实现数据的冲上往下传递。那么从下往上传递呢?flutter 提供了 Notification 实现向上传递。Notification中文意思是通知,与Android中的广播机制类似,在Flutter中Notification的功能是子节点状态变更,发送通知上报。Notification的数据变更是通过Widgte树向上冒泡的,我们往往在下层Wdiget发送通知然后在上层处理通知。//创建通知类class MyNotification extends No

2020-07-21 14:42:49 454

原创 flutter中InheritedWidget

介绍InheritedWidget 组件就是Flutter 中的一个功能组件,它可以实现Flutter 组件之间的数据共享,他的数据传递方向在Widget树传递是从上到下的inheritedWidget 不继承自StatefulWidget,而是 InheritedWidget -> ProxyWidget -> Widget 这样的继承关系。简单来说,InheritedWidget 的作用是向它的子 Widget 有效地传播和分享数据,当 InheritedWidget 作为一个Paren

2020-07-21 00:23:59 223

原创 flutter 键盘弹出和收起页面bug

场景我在客服系统中定义个列表widget和底层输入widget,但是在软键盘的弹出收起的时候,发现列表widget 并没有被重新绘制,这导致列表中的部分信息被遮挡,1、Scaffold首先想到的 Scaffold 的 resizeToAvoidBottomInset 属性。在 Flutter 中 Scaffold 默认情况下 resizeToAvoidBottomInset 为 true,当 resizeToAvoidBottomInset 为 true 时,Scaffold 内部会将 media

2020-07-20 18:55:15 3383

原创 flutter 中Route

什么是RouterAndroid中,页面对应的是Activity,在iOS中是ViewController。而在Flutter中,页面只是一个widget,是Router。Route 在Android 中通常指一个 Activity ,在 iOS 中指一个 ViewControllerMaterialPageRoute官方解释MaterialPageRoute继承自PageRoute类,PageRoute类是一个抽象类,表示占有整个屏幕空间的一个模态路由页面,它还定义了路由构建及切换时过渡动画的相关

2020-07-20 14:01:30 723

原创 FloatingActionButton禁止动画效果

源码FloatingActionButton是在Scaffold中的widget,里面还定义了位置和动画FloatingActionButtonAnimator如果是null的话 是有默认动画的。上图是默认动画。里面三个方法getOffset() 、getRotationAnimation()、getScaleAnimation()重写class scalingAnimation extends FloatingActionButtonAnimator{ double _x; do

2020-07-17 13:58:52 836

原创 flutter Stream流

在flutter中 stream是很中重要的,在现在市场面flutter中的状态管理框架基本上都是用stream流来实现的Stream分类流可以分为两类:单订阅流(Single Subscription),这种流最多只能有一个监听器(listener)多订阅流(Broadcast),这种流可以有多个监听器监听(listener)Stream创建方式stream创建有很多种,Stream.fromFuture、Stream.fromIterable等方式,但是一般不使用这种,我们使用StreamC

2020-07-06 16:26:59 511

原创 Flutter ListView

ListView是最常用的滑动组件构建ListViewListView(): 在item每没有出现在屏幕就会创建,性能开销比较大,可能会引起卡顿,所以不适合长列表ListView.build(): 最长使用的列表**ListView.separated():**处理分割线1.ListView()基础构造 @override Widget build(BuildContext context) { return Container( height: 200, c

2020-06-19 16:01:45 295

原创 flutter_redux

redux 组成Store :用于存储和管理State,所有的状态都储存在Store里,Store会放在App顶层Action:用户触发的一种行为Reducer:根据Action产生新的State,State状态是由reducer生成并储存在Store里面的。Store更新状态的时候,并不是更改原来的状态对象,而是将reducer生成的新的状态对象替换掉老的状态对,过程:通过发起一个action来告诉Reducer,状态要发生变化了,这是Reducer会收到 一个action,然后根据收到的a

2020-06-10 18:48:09 699

原创 IM即时通讯

1 IM系统体系主要模块客户端:一般用于用户收发消息的终端设备,内置的客户端程序和服务端进行网络通讯,用来承载用户的互动请求和消息接收到功能,接入服务:接入服务是服务端的门户,为客户端提供收发消息的出入口,发送消息一般客户端发送消息到接入服务,然后再由接入服务交到业务层进行处理,接入服务分为,连接保持、协议解析、session维护和消息推送一般使用的socket保持长连接连接保持:一般我们使用socket保持长链接协议解析:提供协议的编解码工作,为了节省流量系统会对传输的内容进行紧凑的编码(p

2020-06-05 16:15:14 2058

原创 Android原生集成flutter module步骤

重要!!!明确自己使用的flutter 版本,不同的版本在原生页面承载flutter页面的时候方式不同,我使用的是1.17.1 。studio版本是3.5.2阿里flutter_boost 插件可以方便的集成flutter module。但是flutter更新的版本很快,不同版本之间的有核心的api是废弃掉。flutter boost更新兼容达不到flutter sdk更新的速度。如果你要集成flutter boost要注意自己的flutter sdk版本和flutter_boost版本的保持统一。创

2020-06-04 16:52:28 1836

原创 Google Android for Cars的整理Android Automotive OS(一)

1 Android for Cars介绍构建可帮助用户在行车过程中通过 Android Automotive OS 和 Android Auto 进行连接的应用可以分为两类:Android Automotive OS拥有搭载 Android Automotive OS 的车辆的用户可以将应用安装到其车辆的信息娱乐系统中Android Automotive OS 是一款 Android 信息娱乐系统,专门内置到了车辆中。车载系统是专为车辆优化的独立 Android 设备。用户不用使用手机应用,

2020-05-29 17:12:14 2912

原创 Rxjava(一)

使用了那么久的rxjava了。现在有时间记录下了。1.特点1.RxJava 是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库2.Rxjava由于其基于事件流的链式调用、逻辑简洁Rxjava的扩展观察者模式有四种角色1.被观察者(Observable) 产生某个事件2.观察者(Observer) 接收事件,并给出响应动作3.订阅(Subscribe) 连接...

2020-04-20 18:57:13 260

原创 java 反射

反射特点1 特点灵活性高。因为反射属于动态编译,即只有到运行时才动态创建 &获取对象实例。有两种编译方式静态编译:在编译时确定类型 &绑定对象。如使用new关键字创建对象动态编译:运行时确定类型 & 绑定对象。动态编译体现了Java的灵活性、多态特性 & 降低类之间的藕合性执行效率低因为反射的操作 主要通过JVM执行,java的invoke方法是传ob...

2020-03-20 11:03:58 65

原创 Android 自定义拍照ui界面

这是代码activity 可以抽成控件,说明:1.不需要存储权限,只需要拍照权限 private TextureView textureView; private ImageView ivBack; private ImageView ivCamera2; private CameraDevice mCameraDevice; /** * 摄像头i...

2020-02-27 17:31:25 2045

原创 Thread机制源码

1 源码解析1.1构造方法

2019-08-05 17:39:48 296

原创 kotlin中lambda表达式

1、Lambda表达式语法{ x : int ,y:Int -> x+y }其中 箭头 -> 前的部分是参数,箭头后面是函数体kotlin中lambda表达式始终用花括号包围,注意参数部分没有用括号括起来,箭头可以把实参列表和lambda的函数体隔开可以把lambda的表达式存储到一个变量中,把这个变量当做普通函数对待,val sum ={ x: Int,y :In...

2019-08-05 14:09:06 1309

原创 kotlin中函数的定义和调用

1 、函数声明(前面内容官方有)Kotlin 中的函数使用 fun 关键字声明fun double(x: Int): Int { return 2 * x}函数参数使用 Pascal 表示法定义,即 name: type。参数用逗号隔开。每个参数必须有显式类型:fun powerOf(number: Int, exponent: Int) { …… }函数参数可以有默认值,...

2019-07-26 11:52:33 2896

原创 kotlin中类和属性

1、kotlin中的类1.1 类的声明Kotlin 中使用关键字 class 声明类class Invoice{.......}类声明由类名、类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成。类头与类体都是可选的; 如果一个类没有类体,可以省略花括号class Empty在kotlin中只有数据没有代码的类通常被称为值对象class Person(val name...

2019-07-25 15:46:59 771 2

转载 Rxjava使用和详解

本人有自知之明,没有这个哥们写的好 。防止忘记,#https://www.jianshu.com/p/a406b94f3188

2019-07-19 16:28:36 114

原创 ThreadLocal解析

1、ThreadLocal介绍ThreadLocal解决线程局部变量统一定义问题,多线程数据不能共享。(InheritableThreadLocal特例除外)不能解决并发问题。解决了:基于类级别的变量定义,每一个线程单独维护自己线程内的变量值(存、取、删的功能)1.ThreadLocal类封装了getMap()、Set()、Get()、Remove()4个核心方法。2.通过getMap()获...

2019-07-05 23:15:50 132

原创 Java泛型解析

1 什么是泛型1.泛型是“参数化类型”,举个例子,我们在使用方法的时候,调用某个方法给某个方法传递实参。传入给方法的参数叫做实参,实参的类型就是形参。“参数化类型是什么呢”,就是把某个形参的类型参数化。所以可以称为 “”类型形参“” ,在调用的时候传入类型实参(也就是形参)。泛型只在编译阶段有效List<String> stringArrayList = new ArrayLis...

2019-07-05 11:38:00 107

原创 HandlerThread源码分析

1什么是HandlerThread?1.轻量级异步通信类2.一个实现了Handler通信机制的线程 继承Thread3.HandlerThread内部实现了Looper对象,可以进行Looper循环2 使用步骤// 步骤1:创建HandlerThread实例对象// 传入参数 = 线程名字,作用 = 标记该线程 HandlerThread mHandlerThread = new...

2019-07-03 18:14:25 135

原创 Arraylist源码解析(二)

1 ArrayList特点1.底层是数组结构,按照插入顺序来保存元素,可以利用下标来查找值2.按照下标访问元素最快3.在中间插入元素很慢,删除元素很慢4。线程不安全,看源码并没有synchronized对核心方法进行加锁2 须知1.ArrayList的实现原理就是数组,他的线程不安全,允许其中的元素为null,2.因为底层结构是数组,占据的连续内存的空间,长度是数组的大小,因为是...

2019-07-01 22:30:49 78

原创 HashMap源码分析(一)

1.HashMap特点 1.HashMap可以接受null键值和值 2.HashMap是非synchronized的 3.存储的是键值对。 4.提一句HashMap和HashTab特点不同 。hashTable是线程安全的且不接受null的键值对2. 概念hashing(散列法或哈希法)散列法(hashing):是将字符串转换为固定长度数值或索引值的方法散列表特点:由于通...

2019-06-28 23:47:15 157

空空如也

空空如也

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

TA关注的人

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