自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ extern使用&用法

如:在B的cpp文件中定义和声明一个全局变量g_i,然后在A的cpp中定义和声明同样一个全局变量g_i = 10,在编译时会存在重复定义的问题(是因为都存储在静态存储区嘛,会形成相同的符号表,导致符号表冲突?//B.cpp 中//A.cpp这种情况下,只需要将其中一个cpp中的全局变量前面加上extern关键字即可。

2023-08-01 18:31:04 409

原创 Android NDK工具使用

工具说明用法用addr2line可以将函数地址解析为函数名把so进行反汇编Demagele c++ 符号查看定义的符号查看so中所有的字符串。

2023-07-25 19:29:16 458

原创 【无标题】

工具说明用法用addr2line可以将函数地址解析为函数名把so进行反汇编Demagele c++ 符号查看定义的符号查看so中所有的字符串。

2023-07-24 22:41:58 126

原创 c++ std::move和std::forward总结与使用

当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。...

2022-08-01 21:00:40 463

原创 OpenGLES 学习之帧缓存

什么是帧缓冲区帧缓冲区(framebuffer object)简称 FBO,用于写入颜色值,写入深度信息和深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。图像在绘制时最终都是绘制到帧缓冲区中的,一般情况下我们都是使用的是默认FBO,也就是我们的屏幕,也就是着色器各方面绘制结果存储的逻辑对象。使用方式1. 创建帧缓冲区使用glGenFramebuffers 来创建一个帧缓冲对象unsigned int framebuffer;glGenFramebuffers(1,&framebu

2021-06-08 21:29:50 724 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 1344

原创 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 2235

原创 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 2438

原创 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 11072 3

原创 Android 测光梳理

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

2019-05-27 14:06:39 1962

原创 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 6900 3

原创 Android Camera2 对焦梳理

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

2019-05-27 11:55:32 9586

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

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

2019-04-16 14:27:24 422

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

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

2019-04-14 18:20:58 2193 2

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

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

2019-02-08 16:05:04 351

原创 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 561 1

原创 Android Retrofit源码分析

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

2018-11-11 22:50:50 879

原创 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 3701 1

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

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

2018-11-06 21:41:35 1097

原创 EventBus源码分析

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

2018-11-04 11:03:11 132

原创 Android消息机制

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

2018-11-02 20:18:06 176

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

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

2018-10-31 21:40:39 769

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

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

2018-10-28 21:54:53 368

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

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

2018-10-27 20:27:33 589

原创 Serialiable和Parcelable的用法和区别

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

2018-10-24 20:39:51 1008

原创 Android中Binder学习

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

2018-10-21 11:32:08 5459

原创 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 505

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

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

2018-10-14 17:15:27 250

原创 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 8404 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 266

原创 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 1289 1

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

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

2018-09-25 19:23:51 502

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

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

2018-09-23 20:45:31 284

原创 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 711

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

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

2018-09-22 15:49:41 665

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

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

2018-09-16 13:52:28 498

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

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

2018-09-12 16:48:31 1079

原创 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 375

原创 ListView源码分析

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

2018-09-07 23:09:26 254

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

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

2018-08-30 20:51:24 789

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

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

2017-02-08

空空如也

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

TA关注的人

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