自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jackzhouyu的专栏

Linux学习

原创 Kotlin之边学边分析
原力计划

Kotlin学习笔记 什么是委托模式?以及委托模式的原理和使用场景 koltin中声明的成员属性或者超类不在当前类中去实现,而是交给其他类去完成,叫做委托,使用by关键字来实现。 其使用场景适合那些需要复杂计算并且可以重复使用的场景 lazy懒惰性委托 lazy委托模式不会在声明时就计算好值,而...

2020-06-03 18:01:51 22 0

原创 Android Binder浅析 --- CameraService往ServiceManager添加服务
原力计划

Android Binder浅析 — CameraService往ServiceManager添加服务 为了更好的理解Binder添加服务的原理,请先阅读前一篇博文Android Binder浅析 – 开启ServiceManager服务 添加服务Service简介 通常Binder添加服务是...

2020-06-02 17:47:12 34 0

原创 Retrofit源码解析及感悟
原力计划

Retrofit源码解析 简介 从事移动端开发的人应该都知道Retrofit库,作为一个第三方网络封装库,许多App都会用到它,他提供了注解方式的网络接口定义,自定义请求响应参数转换等等功能,大大提高了开发效率;今天我们尝试着来看看它背后的逻辑好在哪里 Retrofit基本使用 public...

2020-05-21 13:31:49 28 0

原创 Android注解笔记
原力计划

Android注解笔记 简介 关于注解的文章网上也很多了,文章也很不错,本文总结记录在开发注解时所踩得坑,希望对你在开发中有所帮助。 不太清楚注解是何物?以及如何开发使用注解可以参考一下链接: 秒懂,Java 注解 (Annotation)你可以这样学 Android中注解的使用 Android...

2020-05-14 11:01:32 44 0

原创 Android JetPack组件之LiveData
原力计划

Android JetPack组件之LiveData 简介 和上一篇Lifecycle组件一样,LiveData也是一个观察者机制的东西,订阅者订阅LiveData后,LiveData数据发生变化,就会通知到订阅者; 使用步骤 创建LiveData数据 加入订阅者到LiveData中去 改变...

2020-05-12 09:09:10 52 0

原创 android JetPack组件之LifeCycle
原力计划

android JetPack组件之LifeCycle 简介 Lifecycle组件是JetPack的核心组件之一,JetPack的其他许多组件都会用到Lifecycle这一组件,如ViewModel、LiveData等。LifeCycle是负责观测Activity生命周期变化状态,并同步给它...

2020-05-11 16:21:10 66 0

原创 Android Activity生命周期搬运与理解
原力计划

Android Activity生命周期搬运与理解 导读 众所周知Android的Activity生命周期设计从OnCreate开始到OnDestroy完结,那设计Activity的工程师为何要做出这样的设计,每个生命周期方法的意义又是什么呢?知其然,且知其所以然,才能更好帮助我们写出更优秀的...

2020-05-06 16:39:48 25 0

原创 Android Binder浅析 -- 开启ServiceManager服务
原力计划

C API void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset ) 文件映射函数,可以将文件或者对象映射到内存中,然后对映射内存进行读写操作,而不需要去read/write读写函数...

2020-04-28 14:12:35 45 0

原创 Android Parcel浅析
原力计划

Android Parcel浅析 简介 都说Parcel高效,android framework层大量使用Parcel,尤其是涉及Binder通信模块,大量的跨进程(IPC)通信,使用到Parcel进行数据传递,而且官方建议Bundle使用更换为Parcel,序列化方面也建议使用Parcelabl...

2020-04-08 15:42:30 55 0

原创 ThreadLocal内部分析

简介 ThreadLocal和Synchronized一样,都是用于处理线程间变量问题;后者有用于等待方式处理变量,前者用多个副本处理对象,时间和空间牺牲;那么ThreadLocal内部是如何用副本的形式管理的呢?继续往下看 ThreadLocal一般使用 ThreadLocal<Strin...

2020-02-21 11:39:45 38 0

原创 android使用工具性能优化

简介 本文记录使用工具来对app进行优化过程,主要包括UI界面优化、内存优化、代码优化以及电量优化;各个优化模块是相互关联的,各个模块优化后才能达到app整体的性能提升。 UI界面优化 界面优化方面主要是减少GPU过渡绘制(也就是同一个像素点多次绘制)以及优化渲染时间,优化点主要是: 减少布...

2020-02-16 16:05:03 57 0

原创 Java lambda表达式理解

简介 lambda表达式作为java8的新特性,面向函数式编程,使代码更加简洁,同时也提高编程效率;我们作为开发者,不仅要学会用,还要理解其背后的运作原理 lambda一般使用 lambda使用的规则大致为: (参数)−>{代码主体}(参数) -> \{ 代码主体 \} (参数)−...

2020-02-12 15:31:09 118 0

原创 算法题型浅谈

算法题型浅谈 本文不介绍具体的算法,只是记录一些算法背后的本质问题 最大的几个数字问题 描述: 在许多数据中,找出最大的几个数字;而每次比较的容器(可装载数据长度)是有限的;如何快速找出 本质: 众多数据都需要依次进入有限容器进行比较,重点在于减少比较的次数或者说轮数,如何减少?分组比较,比较过...

2020-01-17 10:12:18 48 0

原创 FFmpeg滤镜学习之AVFilter

FFmpeg滤镜学习之AVFilter 什么是AVFilter? 对音视频数据添加特效,如黑白视频、混音,同时也可以完成音视频像素格式转码工作;官方特效说明请点击;一般使用filter都是在后台服务器对视频进行特效处理,移动端的话相对比较耗资源 AVFilter处理框架 大致框架如下图所示,可...

2020-01-16 11:50:23 95 0

原创 H264协议字段简单分析

H264协议字段简单分析 一、 h264基础概念 RBSP: 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若干比特“0”,以便字节对齐。 EBSP: 扩展字节序列载荷– >在RBSP基础上填加了仿校验字节(0X03)它的原因是...

2020-01-14 09:02:18 117 0

原创 你真的懂了Camera的尺寸参数了吗?

你真的懂了Camera的尺寸参数了吗? 本文针对自定义相机开发中,使用opengl渲染时,引发的最终视图变形问题 开发相机的过程中,你是否遇到过你想要的是右边图效果,结果出来的却是左边图效果,如果你遇到了,本文你遇到的问题或许有帮助;引发上面的不同效果,就是因为一些列的尺寸所引发的问题。 自定...

2020-01-10 15:34:33 102 0

原创 FFmpeg手记

音频的一些基本概念 AVSampleFormat 音频sample的存储格式 channel layout 各个通道存储顺序 avcodec_send_packet和avcodec_receive_frame 音频解码 采样格式是AVSampleFormat: enum AVSampleFor...

2019-12-31 15:04:43 76 1

原创 大白话磨皮美颜原理

大白话磨皮美颜原理 谈到磨皮美颜,大家可能认为是一个很高深难懂的事情,网上搜索关于美颜的文章,一般都是搬出许多算法,看得让你头晕目眩的。本篇文章将用大白话来让你快速认识磨皮美颜原理,轻松get到她的点!只要你耐着性子读完本篇文章,你会发现美颜原理其实也是一件很好理解的事情 磨皮美颜概念 认清目...

2019-12-24 11:58:21 315 0

原创 OpenGL特效记录

OpenGL特效记录 高斯模糊特效 权重乘积求和 lowp vec4 color = vec4(0.0); if(blurtexCoor[0].y < 0.7 && blurtexCoor[0].y > 0.3){ color = textu...

2019-12-16 11:14:05 91 0

原创 有一种美叫朦胧的美

《花非花》唐代:白居易 花非花,雾非雾。夜半来,天明去。 来如春梦几多时?去似朝云无觅处。 似花不是花,似雾不是雾!常言道:距离产生美,其背后的实质是距离产生模糊感,而模糊产生美感。本文将由我来细细阐述模糊的由来。 如上图,对图片的局部部分加以模糊,会使图片的整体视觉美感有一个大大的提升。那么...

2019-12-15 17:08:32 65 0

原创 Android OpenGL小结之专业名词理解

Android OpenGL小结之专业名词理解 出入之间,境界始大。不仅收其精微,汇其宏阔,且人情与道理兼具,生气同高致并存。入而不出,狭隘;出而不入,浮浅。故善学者,善于深思与总结。学习如此,创作如此,生活亦如此。 学习不仅仅是接受一些新知识,而且要擅于总结,把学习的新知识转化为自己的知识,...

2019-12-06 11:09:40 35 0

原创 一场微秒级的同步事故

导读:诺兰导演作品《星际穿越》里面有这样一个片段,母舰损坏以后,处于高速旋转状态,库珀为了对接母舰,必须要使自己的飞船高速旋转, 与母舰同步成一样的状态,才能进行对接成功;只要同步成功才能对接登上母舰,同步失败则会机毁人亡。 事故场景复现 一场高端大型的直播真人xx秀,xxx人正线下观看,刹那间直...

2019-11-19 18:17:43 60 0

原创 音视频同步理解

音视频同步理解 最近学习FFmpeg音视频同步,着实很难理解,本文记录学习过程中的领悟知识点,如有不对,还望指正! 为何要进行音视频同步? 正常情况来说,在对视频 编码 时,大致是这个样子的: 编码时,以时间线为轴,依次给编码后的数据打上正确的时间pts,如果这个地方pts时间打错了,播放时无路...

2019-10-09 18:35:56 172 0

原创 C++ STL容器

STL简介 我们在学习C语言时,都有自己写过一些栈、链表等数据结构的集合,然而在C++里面,这些数据结构我们无需在自己实现,STL容器帮我们实现了许多数据结构,主要有以下: string vector list set map 以vector为例来说 vector是以数组形式实现的一个可动态分...

2019-10-08 11:03:37 39 0

原创 C++基础语法知识点

C++基础语法知识点 指针和引用 指针和引用一样都占用内存,内存存放变量的地址 以下是我的分析,源代码: #include <stdio.h> int main(){ int a = 2; int *p = &a; int c = 4; int &b = c; ...

2019-09-16 11:42:42 93 0

原创 ffmpeg编译脚本打包记录

ffmpeg编译脚本打包记录 ffmpeg使用3.3.9版本,x264和到ffmepg里面一块编译 下载链接: 链接:https://pan.baidu.com/s/1glzJmiRLeo7qqnh0picVsg 密码:4sh5 包含以下几个文件 解压ffmpeg和last_x264压缩包,解...

2019-08-08 14:31:17 70 0

原创 android stduio CMake编译学习

android stduio CMake编译学习 简介 CMake编译配置比之前的Android.mk编译配置简单,功能更强大,话不多说,直接开始 开始 apk的编译都是从build.gradle配置开始的,我们需要在build.gradle里面配置好CMakeLists的位置,以及Cmake的编...

2019-08-08 11:42:38 51 0

原创 OpenSL ES音频库学习

OpenSL ES音频库学习 简介 什么是OpenSL ES? openSL ES是一个专用于嵌入式系统的音频库,可以提供对音频的播放和录制等相关功能,在Android上Aduio Recoder都是基于此库实现的,同时,我们也可以在Android的JNI里面使用此库进行音频开发,官方介绍请点击 ...

2019-07-24 10:30:06 281 3

原创 OpenGL ES学习教程 --- FBO

OpenGL ES学习教程 — FBO 简介之什么是FBO Frame Buffer Object帧缓冲对象,按照之前的学习绘制图像、纹理,着色器着色后最后一步,会将所有的数据都传给FBO,然后在屏幕上显示,只不过没使用自定义FBO之前都是使用默认的FBO,这个FBO id为0;使用我们自定义的F...

2019-07-19 11:22:38 170 0

原创 OpenGL ES学习教程 --- EGL

OpenGL ES学习教程 — EGL 简介之什么是EGL OpenGL是跨平台开源的库,功能实现由各个产商完成,为了实现OpenGL对各个产商的功能调用,开发了EGL这一中间件连接以上二者;我们通常在使用Android的GLSurface时并没有配置EGL中间环境,因为GLSurface帮我们实...

2019-07-19 10:36:33 217 0

原创 OpenGL ES学习教程 --- 坐标系统变换

OpenGL ES学习教程 — 坐标系统变换 简介 经过前面几节的学习,我们能画一个简单的图像,并且也可以上一些颜色,但是如果我们需要在2维屏幕上画一个3维图像,这就需要对物体坐标进行变换,3维是有XYZ轴的,而屏幕上的坐标只有XY轴(OpenGL的屏幕坐标称为归一化坐标,也有Z轴只是屏幕上的物体...

2019-07-13 13:33:23 81 0

原创 OpenGL学习教程 --- 纹理

OpenGL学习教程 — 纹理 什么是纹理? 在前一节的教程中,我们使用了OpenGL完成了基本的图形绘制,这只是一个很简单基础图形,既不形象,也不逼真,为了使我们绘制的物体更加形象而生动,引入纹理这个东西,何为纹理,你可以理解为一张二维平面 贴图数据,我们使用顶点坐标绘制物体形状,顶点坐标 对应...

2019-07-12 16:48:10 109 0

原创 openGL ES学习教程 --- 概念篇

什么是OpenGL ES? openGL是一个免费跨平台的图形库,能实现复杂的2D、3D图形,而OpenGL ES是专门针对嵌入式终端而裁剪的一版openGL库,其原理是OpenGL提供的API控制GPU,发送操作指令,控制图像渲染管线进行绘制,最后在通过EGL与本地窗口交互,渲染输出到屏幕;EG...

2019-07-06 15:17:59 82 0

原创 openGL ES学习教程 ---基本图像绘制

openGL ES学习教程(一) 什么是OpenGL ES? openGL是一个免费跨平台的图形库,能实现复杂的2D、3D图形,而OpenGL ES是专门针对嵌入式终端而裁剪的一版openGL库 android中哪个地方用到了OpenGL ES? Android中你可以在JNI层或者java层使用...

2019-06-28 10:55:47 640 0

原创 JNI笔记

JNI引用 jin中都是通过不透明的引用来拿到对象实例,在通过JNI函数获取对象的属性和方法,JNI的引用总体分为3大类:局部引用、全局引用和若引用 局部引用 局部引用存在于函数中,生命周期在方法体中,方法结束,局部引用的对象对自动释放,所以在方法结束后将局部引用传递给其他方法使用,可能会造成异常...

2019-06-20 10:24:34 45 0

转载 【转载】时间复杂度计算过程

时间复杂度

2019-05-31 10:27:51 337 0

原创 app GPU性能调试笔记

简介 本文是主要是记录作者调优app的过程记录,旨在记录,不在文采 调试界面是否存在过度绘制? 过度绘制就是一个像素点重复绘制的次数太多,比如你的App登录视图有View1、View2、View3…,并且这三个组件的宽高属性都是match_parent,相当于都重叠在一起了,而我们只能看到最上面的...

2019-05-28 10:25:55 237 0

原创 Java多线程3.0

CountDownLatch计数器 简单解释 一个或者一组线程CountDownLatch.await()等待CountDownLatch计数器为0的时候开始执行;形象比喻有点类似出游人数计数器,统计出游报到人数,来一个,总数减一,人来完了,就可以出发去旅游了 public void Test()...

2019-05-22 21:42:32 57 0

原创 Android组件之间通信

App内部组件通信 Intent添加bundle 广播 cotentProvider(更适合跨进程) eventBus(反射调用) RxBus (可能会产生内存泄漏,需要在页面销毁时切断订阅关系) liveDatabus 谷歌推荐,与页面生命周期绑定,只会在页面start/resume状态下才会...

2019-05-22 11:44:23 98 0

原创 Canvas手记

Canvas手记 canvas.save() 保存Canvas的当前状态,后续对canvas的作画直接画上去 canvas.saveLayer() 拥有上面save的功能,并且会生成一个Layer图层,由于生成了图层比较save更消耗资源,此后,作画会在这个Layer上作画,并且会把这个图层La...

2019-05-17 09:59:04 29 0

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