Android
lin_henry
这个作者很懒,什么都没留下…
展开
-
音视频基础概念
1 声音的物理性质声音是波。声音是由物体震动而产生的,声音的三要素声波的三要素是 频率、振幅和波形。频率代表音阶的高低。振幅代表响度。波形代表音色。频率越高、波长越短,低频波长、容易绕过障碍物。响度就是能量大小的反馈。分贝来描述响度频率和振幅影响音色。频率范围 20HZ~20KHz。2 数字音频为了将模拟信号数字化,需要进行采样、量化和编码。采样是在时间轴上对信号进行数字话。需要对最高频率的2倍进行采样(采样定律)量化:是在幅度轴上面进行对信号的数字话。例如16进制表示一个采样编码原创 2020-12-15 14:21:57 · 353 阅读 · 0 评论 -
音视频文件 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 · 1229 阅读 · 0 评论 -
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 · 557 阅读 · 0 评论 -
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 · 1779 阅读 · 0 评论 -
Android 架构组件之 ViewModel 详解
ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存Android 框架可以管理界面控制器(如 Activity 和 Fragment)的生命周期。Android 框架可能会决定销毁或重新创建界面控制器,以响应完全不受您控制的某些用户操作或设备事件。如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity原创 2020-10-10 17:38:50 · 2816 阅读 · 0 评论 -
Android 架构组件之 LiveData详解
LiveData 概览LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,则 LiveData 会认为该观察者处于活跃状态。LiveData 只会将更新通知给活跃的观察者。为原创 2020-08-24 10:21:23 · 484 阅读 · 0 评论 -
Android 架构组件之 LifeCycle详解
使用生命周期感知型组件处理生命周期生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。一种常见的模式是在 Activity 和 Fragment 的生命周期方法中实现依赖组件的操作。但是,这种模式会导致代码条理性很差而且会扩散错误。通过使用生命周期感知型组件,您可以将依赖组件的代码从生命周期方法移入组件本身中。androidx.lifecycle 软件包提供了可用于构建生命原创 2020-08-21 17:41:55 · 946 阅读 · 0 评论 -
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 · 187 阅读 · 0 评论 -
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 · 3061 阅读 · 0 评论 -
Rxjava(一)
使用了那么久的rxjava了。现在有时间记录下了。1.特点1.RxJava 是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库2.Rxjava由于其基于事件流的链式调用、逻辑简洁Rxjava的扩展观察者模式有四种角色1.被观察者(Observable) 产生某个事件2.观察者(Observer) 接收事件,并给出响应动作3.订阅(Subscribe) 连接...原创 2020-04-20 18:57:13 · 285 阅读 · 0 评论 -
java 反射
反射特点1 特点灵活性高。因为反射属于动态编译,即只有到运行时才动态创建 &获取对象实例。有两种编译方式静态编译:在编译时确定类型 &绑定对象。如使用new关键字创建对象动态编译:运行时确定类型 & 绑定对象。动态编译体现了Java的灵活性、多态特性 & 降低类之间的藕合性执行效率低因为反射的操作 主要通过JVM执行,java的invoke方法是传ob...原创 2020-03-20 11:03:58 · 85 阅读 · 0 评论 -
Android 自定义拍照ui界面
这是代码activity 可以抽成控件,说明:1.不需要存储权限,只需要拍照权限 private TextureView textureView; private ImageView ivBack; private ImageView ivCamera2; private CameraDevice mCameraDevice; /** * 摄像头i...原创 2020-02-27 17:31:25 · 2182 阅读 · 0 评论 -
HandlerThread源码分析
1什么是HandlerThread?1.轻量级异步通信类2.一个实现了Handler通信机制的线程 继承Thread3.HandlerThread内部实现了Looper对象,可以进行Looper循环2 使用步骤// 步骤1:创建HandlerThread实例对象// 传入参数 = 线程名字,作用 = 标记该线程 HandlerThread mHandlerThread = new...原创 2019-07-03 18:14:25 · 175 阅读 · 0 评论 -
HashMap源码分析(一)
1.HashMap特点 1.HashMap可以接受null键值和值 2.HashMap是非synchronized的 3.存储的是键值对。 4.提一句HashMap和HashTab特点不同 。hashTable是线程安全的且不接受null的键值对2. 概念hashing(散列法或哈希法)散列法(hashing):是将字符串转换为固定长度数值或索引值的方法散列表特点:由于通...原创 2019-06-28 23:47:15 · 181 阅读 · 0 评论 -
Java泛型解析
1 什么是泛型1.泛型是“参数化类型”,举个例子,我们在使用方法的时候,调用某个方法给某个方法传递实参。传入给方法的参数叫做实参,实参的类型就是形参。“参数化类型是什么呢”,就是把某个形参的类型参数化。所以可以称为 “”类型形参“” ,在调用的时候传入类型实参(也就是形参)。泛型只在编译阶段有效List<String> stringArrayList = new ArrayLis...原创 2019-07-05 11:38:00 · 122 阅读 · 0 评论 -
ThreadLocal解析
1、ThreadLocal介绍ThreadLocal解决线程局部变量统一定义问题,多线程数据不能共享。(InheritableThreadLocal特例除外)不能解决并发问题。解决了:基于类级别的变量定义,每一个线程单独维护自己线程内的变量值(存、取、删的功能)1.ThreadLocal类封装了getMap()、Set()、Get()、Remove()4个核心方法。2.通过getMap()获...原创 2019-07-05 23:15:50 · 172 阅读 · 0 评论 -
Rxjava使用和详解
本人有自知之明,没有这个哥们写的好 。防止忘记,#https://www.jianshu.com/p/a406b94f3188转载 2019-07-19 16:28:36 · 145 阅读 · 0 评论 -
kotlin中类和属性
1、kotlin中的类1.1 类的声明Kotlin 中使用关键字 class 声明类class Invoice{.......}类声明由类名、类头(指定其类型参数、主构造函数等)以及由花括号包围的类体构成。类头与类体都是可选的; 如果一个类没有类体,可以省略花括号class Empty在kotlin中只有数据没有代码的类通常被称为值对象class Person(val name...原创 2019-07-25 15:46:59 · 853 阅读 · 2 评论 -
Thread机制源码
1 源码解析1.1构造方法原创 2019-08-05 17:39:48 · 321 阅读 · 0 评论 -
Arraylist源码解析(二)
1 ArrayList特点1.底层是数组结构,按照插入顺序来保存元素,可以利用下标来查找值2.按照下标访问元素最快3.在中间插入元素很慢,删除元素很慢4。线程不安全,看源码并没有synchronized对核心方法进行加锁2 须知1.ArrayList的实现原理就是数组,他的线程不安全,允许其中的元素为null,2.因为底层结构是数组,占据的连续内存的空间,长度是数组的大小,因为是...原创 2019-07-01 22:30:49 · 98 阅读 · 0 评论