自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 中的几种构造函数

我们对一个对象的操作一般分为下面四种创建拷贝移动销毁创建创建这个操作也就是我们最熟悉的创建一个对象假设有一个class A:class A{public: A(int i); A() = default;private: int a_i;};我们为它定义了两种构造函数:含参数的默认构造函数因为第一种构造函数只含有一个实参,因为它定义了转换为此类型的隐式转换机制,这种构造函数叫做转换构造函数: A a = 1;我们可以使用explici

2020-11-01 17:16:13 119

原创 MediaCodec支持的类型

info: OMX.google.mp3.decodergetSupportedTypes: audio/mpeginfo: OMX.google.amrnb.decodergetSupportedTypes: audio/3gppinfo: OMX.google.amrwb.decodergetSupportedTypes: audio/amr-wbinfo: OMX.google....

2019-07-31 14:54:13 1282

原创 FLV格式详解

FLV封装格式是由一个文件头和文件体组成的。其中,FLV body是由一对(previous tag size 字段+tag)组成。previous tag size在tag前面,占4个字节,表示前一个tag的大小。FLV Header后的第一个previous tag size 为0。Tag一般分为三类:音频数据类型视频数据类型脚本(帧)数据类型FLV封装格式中,FLV Heade...

2019-07-18 20:46:17 579

原创 FFmpeg源码分析:avformat_open_input

avformat_open_input(),该函数用于打开多媒体数据并且获取一些信息,它的声明位于libavformat/avformat.h:/** * Open an input stream and read the header. The codecs are not opened. * 打开输入流,并且读取header。codecs不会被打开。 * The stream must...

2019-06-20 20:05:03 4442 1

原创 Android 测光梳理

Android 测光梳理什么是测光我们所看到的,不是物体本身,而且这个物体上反射出来的光,我们想要看东西,我们的眼睛就需要接受这个光,同理,相机想要拍出照片,也需要接收这个光。人眼是可以自动调节进光量的,但是相机是做不到的,所以,我们需要控制这个光的进入,光进入多了,照片会过曝,光进入少了,照片会欠曝,这个时候,我们就需要测光了。测光就是测光线的明暗,使相机实现正确曝光的过程。也就是组合曝...

2019-05-27 14:06:39 601

原创 Camera2 闪光灯梳理

Camera2 闪光灯在Android Camrea2中与Flash有关的只有两个字段:CaptureRequest.FLAH_MODECaptureRequest.CONTROL_AE_MODE所有在使用闪光灯时,必须先保证CaptureRequest.CONTROL_MODE为ATUO,而且必须保证CameraCharacteristics.FLASH_INFO_AVAILABLE ...

2019-05-27 12:38:12 3004 3

原创 Android Camera2 对焦梳理

Android Camera2 对焦梳理对焦的原理通过相机镜头中镜片组的前后移动,改变像距的位置,使物像恰好落在底片或感光底片上。焦点(focus)平行光线射入凸透镜时,镜头将所有的光线聚集在一点,这个点,就叫做焦点;焦点和镜片光学中心的距离叫做焦距。对于我们照相机来说,照相机的镜头就是一个凸透镜,胶片或者感光底片就是屏幕,它也符合凸透镜成像的原理。凸透镜成像公式:1/u + 1...

2019-05-27 11:55:32 4765

转载 即时通讯网 即时通讯音视频开发

即时通讯音视频开发(一):视频编解码之理论概述即时通讯音视频开发(二):视频编解码之数字视频介绍即时通讯音视频开发(三):视频编解码之编码基础即时通讯音视频开发(四):视频编解码之预测技术介绍即时通讯音视频开发(五):认识主流视频编码技术H.264即时通讯音视频开发(六):如何开始音频编解码技术的学习即时通讯音视频开发(七):音频基础及编码原理入门即时通讯音视频开发(八):常见的实时...

2019-04-16 14:27:24 185

原创 三维模型变换与修正Android相机图像方向

三维模型变换与修正Android相机图像方向介绍三维模型变换:什么是MVP矩阵:MVP矩阵就是模型-视图-投影矩阵(Model View Projection Martix)模型矩阵:将物体坐标变换为世界坐标,主要用到平移变换,旋转变换和放缩变换。视图矩阵:将世界坐标变换为眼睛坐标/观察坐标系投影矩阵:将眼睛坐标变换为裁剪坐标/投影坐标系 矩阵变换:MVP矩阵...

2019-04-14 18:20:58 659 1

转载 音视频相关基础知识与FFmpeg介绍

音视频基础知识视频播放原理下图是一个最简单的视频播放的过程(不包括视频加密等等过程):这是一个视频播放的最基本的原理流程图,从这个图可以很整体的看到视频处理的一些主要步骤。注意:我们利用FFmpeg进行编程的时候几乎就是基于这个流程图来进行的。比如说,编程的时候我们会按到编码器,解码读取数据,绘制到屏幕上的时候可能还需要把YUV数据转换为RGB等。我们常见的封装视频的格式有:flv...

2019-02-08 16:05:04 162

原创 JNI基本使用

JNI数据类型基本数据Java基本数据类型域JNI数据类型的映射关系:Java类型->JNI类型->C类型JNI的基本数据类型(左边是Java,右边是JNI):boolean jbooleanbyte jbytechar jcharshort jshortint jintlong jlongfloat jfloatdouble jdouble...

2019-02-04 16:00:44 268

原创 Android Retrofit源码分析

作为我最爱的一个网络请求库,怎么不来搞搞它呢?其实Retrofit是OKHTTP的一个封装,它的网络请求还是交给OKHTTP来做的。我们一般情况下,会这样来做实例化Retrofit: Retrofit client = new Retrofit.Builder() .baseUrl("xxxxx") .addConverterF...

2018-11-11 22:50:50 764

原创 Android SurfaceView原理分析

首先,我们看看SurfaceView的官方介绍:Provides a dedicated drawing surface embedded inside of a view hierarchy. You can control the format of this surface and, if you like, its size; the SurfaceView takes care of...

2018-11-07 22:30:13 2358 1

原创 Android Java层UI渲染实现 四 Surface的创建和Vie绘制

在上面几篇中,我们分别看了Context的创建,Window的创建,然后是DecorView的创建,在View的创建那篇中,我们可以看到,在DecorView初始化好了后,会创建subdDecor,然后会用WindowManager调用它的setContentView方法,将创建后了的subDecor传进去,在该方法中,又会它mContentParent调用addView方法,将subDecor添...

2018-11-06 21:41:35 583

原创 EventBus源码分析

作为传递消息的神器,我一直对它十分感兴趣,所以现在来看看它。一般情况下,我们会在需要传递消息的地方注册一个对象:例如在Activity中public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { ...

2018-11-04 11:03:11 63

原创 Android消息机制

概述Android应用程序是基于消息驱动的,也就是说,在Android应用程序主线程中,所有函数都是在一个消息循环中执行的。Android应用程序主线程是一个特殊的线程,因为它同时也是UI线程以及触摸屏,键盘等输入事件的线程。在Android应用程序进程的启动过程中,会去加载ActivityThread类,并且执行这个类的main方法,在main方法里面实现了应用程序的消息循环过程: pu...

2018-11-02 20:18:06 99

原创 Android Java层UI渲染实现 三 View的创建

根据前面的分析,我们可以知道,每一个Activity都关联了一个Window对象,用来描述

2018-10-31 21:40:39 535

原创 Android Java层UI渲染实现 二 Window的创建

在上一篇中我们看了Context的创建过程,我们知道,每一个Activity都有一个Context,同时它还有一个Window对象,用来描述一个具体的应用程序窗口。现在我们就来分析分析它的创建还记得在Activity初始化的时候,调用attach方法的时候,会创建一个PhoneWindow对象,我们就从这里开始分析。final void attach(Context context, Act...

2018-10-28 21:54:53 205

原创 Android Java层UI渲染实现一(Context的创建)

在Android应用程序的四大组件中,只有Activity组件与UI相关,它描述的是应用程序窗口,因此我们通过它的UI实现来分析Android系统在Java层的UI实现。首先,我们得从Activity的启动开始:再我们调用startActivity后,最终会调用startActivityForResult()方法,然后在这个方法里面最终会调用Instrumentation.ActivityR...

2018-10-27 20:27:33 305

原创 Serialiable和Parcelable的用法和区别

在Android中,经常会遇到这样的情况,如何对两个Activity之间传递消息,熟悉Android开发的,肯定知道用Intent,对于自定义的Object,我们会使用Bundle中的putSerializable(),或者Bundle.putParcelable(),可是我比较喜欢用Serialiable的方式,因为简答啊,代码少啊,可是在Android中进程间通信里,我们要传递一个自定义的Ob...

2018-10-24 20:39:51 550

原创 Android中Binder学习

关于Binder,我们需要知道,为什么需要跨进程通信(IPC),怎么做到跨进程通信?为什么是Binder?由于Android是基于Linux内核的,因此有些知识需要我们先了解:进程隔离进程隔离是为保护操作系统中进程互不干犹而设计的一组不同硬件和软件的技术。这个技术是为了避免进程A写入进程B的情况发生。进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就放置进程A...

2018-10-21 11:32:08 3504

原创 Android IntentService用法和源码分析

关于IntentService的介绍,我个人觉得还是先看官方描述比较好:IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests through startService(Intent) ...

2018-10-17 21:47:15 340

转载 Android热修复入门:Android中的ClassLoader

ClassLoader简介对于Java程序来说,编写程序就是编写类,运行程序也就是运行类(编译得到的class文件),其中起到关键作用的就是类加载器ClassLoader。任何一个Java程序都是若干个class文件组成的一个完整的Java程序,在程序运行的时候,需要将class文件加载到JVM中才可以使用后,负责加载这些class文件的就是Java的类加载(ClassLoader)机制。...

2018-10-14 17:15:27 116

原创 android .dex文件探究

在我们写Java代码的时候,生成的文件是.java文件,但是JVM并不识别这个,所以会先转成class文件,而在Android端,Android上的Davlik虚拟机能运行.dex。所以dex文件中包含了所有的app代码,可利用反编译工具获取java代码。即dex文件就是Android Dalvik虚拟机运行的程序。为了能够加深印象,我们先构造一个dex文件。public class DEX...

2018-10-13 18:21:32 4103 1

原创 Android之探究Service

虽然Service作为Android四大组件之一,但是我真的在项目中很少用到它,最近写个人项目的时候,需要写一个小的音乐播放器在项目中,就用到了Service,所以现在来总结总结它。什么是Service?还是看官网的解释:两不是:A Service is not a separate process. The Service object itself does not imply it...

2018-10-07 18:06:03 133

原创 Glide源码分析(二)——从用法来看之load&into方法

上一篇,我们分析了with方法,文章链接:https://blog.csdn.net/qq_36391075/article/details/82833260在with方法中,进行了Glide的初始化,创建了RequesManger,并且绑定了生命周期,最终返回了一个RequestManager,现在,我们就来分析分析load方法:同样load方法也有很多重载方法: public Requ...

2018-09-26 23:16:36 671

原创 Glide源码分析(一)从用法来看之with方法

继续啃源码,用过Glide的人,肯定都觉得它好好用,我们一般只需要几行代码,就可以达到我们想要的效果,可以在这个背后是什么呢?就需要我们来看了。我一般看源码,我喜欢先从用法来看,然后一步一步的再细扣,所以就先从用法来看Glide的整体流程。用过Glide的人,用下面这段代码,就可以进行图片的加载:Glide.with(this) .load(url) ...

2018-09-25 19:23:51 285

原创 OKHttp源码分析——拦截器 下

拦截器上篇我们看了三个拦截器,分别是RetryAndFollowUpInterceptor,BridgeInterceptor和CacheInterceptor这篇我们看后面的两个拦截器,也是最重要的两个,在看源码之前,先做一下铺垫:为什么要做app网络优化keepalive在http请求中,对于请求速度提升和降低延迟,keepalive在网络连接中发挥着重大作用。我们知道,做http请...

2018-09-23 20:45:31 156

原创 OKHttp源码分析---OKIO

简介JavaNIO和阻塞I/O阻塞I/O通信模式:调用InputStream.read()方法时是阻塞的,它会一直等到数据来时才返回。NIO通信模式:在JDK1.4开始,是一种非阻塞I/O,在Java NIO的服务器由一个专门的线程来处理所有I/O事件,并负责分发。线程之间通讯通过wait和notify等方式。okiookio是由square公司开发的,它补充了java.io和jav...

2018-09-22 23:06:22 281

原创 OkHttp3源码分析二 拦截器 上

在上一篇中,我们大概知道了OkHttp进行网络请求的大概的流程:

2018-09-22 15:49:41 527

原创 OkHttp源码分析一从用法来看

OkHttp优点支持HTTP2/SPDY黑科技socket自动选择最好的路线,并支持自动重连拥有自动维护的socket连接池,减少握手次数拥有队列线程池,轻松写并发拥有Interceptors轻松处理请求和响应基于Headers的缓存策略OkHttp的使用一般情况下,我们会这样使用OkHttp: OkHttpClient client = new OkHttp...

2018-09-16 13:52:28 392

原创 计算机网络基础之HTTP和HTTPS

如果我们要看新闻,假设访问这个网址:http://www.163.com,http://www.163.com是个URL,叫做统一资源定位符。之所以叫统一,是因为它是有格式的。 HTTP称为协议,www.163.com是一个域名,表示互联网上的一个位置。正是因为这个东西是统一的,所以当我们使用浏览器访问的时候,浏览器才知道如何进行统一处理。...

2018-09-12 16:48:31 596

原创 Android学习之HandlerThread使用场景和源码分析

为了避免ANR,我们常常需要在线程中做耗时操作,然后把结果抛到主线程进行处理。 在Android中为了提供了很多方式,其中一种就是HandlerThread。先看看官网对它的介绍: Handy class for starting a new thread that has a looper. The looper can then be used to create h...

2018-09-09 17:32:22 157

原创 ListView源码分析

首先先看看ListView的继承结构:我们可以看到ListView直接继承自AbsListView,而AbsListView有两个子实现类,一个是ListView,另一个是GridView,因此我们可以知道的是ListView和GridView在工作原理和实现上是有很多共同点的。我们在使用ListView的时候,一定会用的Adapter,那么Adapter是干嘛用的呢?Adap...

2018-09-07 23:09:26 175

原创 RecycylerView回收和复用机制解析

首先,我们先创建一个RecyclerView的小例子:效果如图:我们可以看到,一个屏幕一次性只能显示10个item,其实我一共创建了30个item,那么这30个item是一次性创建的吗?我们看一下log:D/BaseAdapter: onCreateViewHolder: D/BaseAdapter: onBindViewHolder: ViewHolder{401cc...

2018-08-30 20:51:24 406

原创 Android学习之RxJava的基本语法

简介RxJava其实就是提供一套异步编程的API,这套API是基于观察者模式的,而且是链式调用的,所以使用RxJava编写的代码的逻辑会非常简单。RxJava有以下三个基本的元素: 1. 被观察者(Observable) 2. 观察者(Observer) 3. 订阅(subscribe)它的gradle配置: compile 'io.reactivex.rxjava...

2018-08-27 22:14:32 207

原创 计算机网络基础之TCP/IP

TCP包头格式:源端口号和目标端口号和UDP一样,是不可少的,因为少了的话就不知道应该发给哪个应用了。接下来是包的序号,这是为了解决乱序的问题然后是确认号,发出去的包应该有确认,要不然不知道对方收到了。接下来是一些状态位,SYN是发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接等。TCP是面向连接的,因为双方都要维护连接的状态,这些带状态位的包的发送,会引起双方状...

2018-08-26 18:00:42 1217

转载 android学习之组件化架构

在项目的开发过程中,随着开发人员的增多以及功能的增加,如果提前没有使用合理的开发架构,那么代码会越来越臃肿,功能间代码耦合也会越来越严重,这时候为了保证项目代码的质量,就必须进行重构。组件化和模块化的区别模块 模块指的是到哪里的业务模块,如首页模块,直播间模块 组件 组件指的是单一的功能组件,如视频组件,支付组件等,每个组件都可以以一个单独的module开发,并且可以单独抽出来作为S...

2018-08-25 21:37:26 683

原创 RecyclerView源码分析之onMeasure,onLayout,onDraw

在平时代码中,最常用的控件之一便是RecyclerView,它的灵活性比ListView高出了很多,google对它的介绍为: A flexible view for providing a limited window into a large data set.最近做项目需要重写它,现在就来分析分析它。首先看它的声明:public class RecyclerView...

2018-08-24 18:41:08 1151

原创 Android自定义改变字体的进度条

最近做简单的富文本的项目,需要动态改变字体的大小,我是写在pupoWindow中的,先看效果:思路:其实思路很简单,就是花7条竖着的线和6条横着的线,然后画一个thumb,根据手指的位置,进行thumb位置的改变。 话不多说,直接上代码,基本注释都给了:public class SliderFont extends View { private Context mC...

2018-08-22 21:07:50 381

算法引论--一种 创造性方法

算法引论,从如何思考构建算法开始,一步一步深入算法内部

2017-02-08

空空如也

空空如也

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

TA关注的人 TA的粉丝

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