自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android:JNI与NDK(五)使用libjpeg对图片进行质量压缩

本文目录一、前言上一篇我们编译出了libjpeg库,本片我们主要用libjpeg来对图片进行质量压缩,既然提到图片质量压缩那我们就详细梳理一下安卓图片质量压缩方面的知识,另外我们还要搞懂安卓本身已经提供了对图片质量压缩的接口为什么我们还要使用libjpeg呢?本片同样比较简单,如果没有C/C++基础可能有一点难度,好了,进入本篇正题。二、图片质量压缩安卓常见图片压缩分为两种:质量压缩与...

2020-01-29 20:08:52 854

原创 Bitmap那些事

前言对于安卓开发来说,Bitmap是我们经常提及的话题之一,对于早期安卓开发来说OOM异常与Bitmap的处理紧密相连,稍不留神就来个OOM玩。现在对于Bitmap的处理大部分情境下就很简单了,一个框架基本全部解决,框架的流行也导致很多开发者一些实现细节不在关心,图片加载立马想到Glide,一行代码解决所有,但是大家应该明白一个道理能写出如此优秀的框架,那肯定是最最基本的技术细节都十分清楚的,...

2020-01-29 19:54:36 230

原创 JVM内存结构与内存模型

JVM内存结构前言java开发人员不像C/C++开发人员那样需要自己来管理内存,每一个对象从出生到死亡都需要由开发人员来管理,对于初级开发人员来说很容易出现内存问题。而java开发人员就很"幸运"了,内存的管理几乎全部交给JVM虚拟机来管理的,不容易出现内存溢出以及内存泄漏问题,但是也正是内存管理交给虚拟机来管理,一旦出现内存问题边无从下手,所以对于JVM内存方面知识我们还是需要了解一些的,...

2019-09-05 11:20:15 309

原创 Android:JNI与NDK(四) Shell脚本的学习以及交叉编译libjpeg图片处理库

一、前言首先,向关注公众号的朋友们道歉,很长时间没更新了,是在惭愧,这段时间忙于结婚等个人事务,耽误了很长时间,除了忙于个人事务额外时间大部分用来整理音视频相关知识点,这部分都会在本系列毫无保留的分享出来。建议各位小伙伴们可以关注一下我的个人github地址:https://github.com/MISAYAWANGLEI 里面包含NDK,音视频等项目,目前包含播放器,直播,音频的录制编解码等...

2019-07-30 10:43:12 485

原创 Android:JNI与NDK(三)NDK构建的脚本文件配置

一、前言本篇我们介绍Android.mk与CMakeLists.txt构建NDK的配置文件,我们知道目前NDK的开发已经基本废弃Android.mk的使用了,AS创建NDK工程默认已经使用CMakeLists.txt构建文件,那我们为什么还要介绍Android.mk呢?因为在平时开发中我们依然有可能接触到Android.mk文件,并且很多老的开源库依然使用的是Android.mk配置方式来构建的...

2019-06-21 11:30:20 186

原创 Android:JNI与NDK(二)交叉编译与动态库,静态库

本篇目录一、前言本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,linux操作系统基本是同样适用的。交叉编译就是在A平台编译出可以在B平台执行的文件,对于我们安卓开发者来说交叉编译就是在window或者mac或者linux系统上编译出可在安卓系统上运行的可执行文件,什么时候需要用到交叉编译呢?音视频开发...

2019-04-11 10:00:17 1064

原创 Android:JNI与NDK(一)

本篇目录一、前言安卓开发中很多场景需要用到NDK来开发,比如,音视频的渲染,图像的底层绘制等等,安卓绝大部分核心代码都是在Native层来完成,也就是用C/C++来完成,有的时候我们看系统源码的时候追着追着就发现最终调用一个native声明的方法,接下来就需要深入native层来查看具体逻辑了,那java代码是怎么调用native层代码的呢?或者说java是怎么调用C/C++代码的呢?这里就用...

2019-04-08 10:00:36 166

原创 okio:定义简短高效

一、前言okio是大名鼎鼎的square公司开发出来的,其是okhttp的底层io操作库,既然已经有java原生的io库为什么还要自己费尽开发一套呢?java原生的io操作存在很多问题,比如读写阻塞,内存管理并不高效,体系臃肿,api调用不精简,以上我个人认为okio改进最大的地方是内存管理方面,比如我们拷贝数据java原生io数据转移大体过程如下:而okio中过程如下:少了一个中间数据...

2019-03-14 09:52:25 299

原创 hashCode()方法以及集合中Set的一些总结

一、前言本篇文章没有什么主题,就是一些零散点的总结。周末没事看了几道蚂蚁金服的面试题,其中有好几道都是特别简单的,基础性的题目,就是我们平时用到的,但是发现要是完全说出来还是有一些不清楚的地方,所以小小的总结一下。二、hashCode()方法理解提到hashCode()必然会涉及equals()方法,二者是紧密相连的,其实面试中被问到这方面往往是考察集合存储对象判断相等的问题。比如有如下...

2019-03-07 10:58:25 338

原创 Gradle入门到实战(二) — ImageOptimization安卓图片转换压缩插件

上一篇我们了解了Gradle的各个方面,本篇介绍一款安卓图片优化转换插件,目前已在项目中使用,可一键批量转换压缩图片,webp转换与png/jpg压缩就是那么简单GitHub项目地址:ImageOptimizationImageOptimization安卓图片优化插件:能有效减少apk安装包大小,支持png/jpg转为webp,支持png图片有损无损压缩,支持jpg有损压缩支持的osma...

2019-02-27 09:55:30 366

原创 Gradle入门到实战(一) — 全面了解Gradle

本文目录

2019-02-20 09:50:11 591

原创 Android版数据结构与算法(十二):经典排序算法再回顾

文章出自汪磊的博客,未经允许不得转载本篇目录一、排序的理解提到排序大部分同学肯定第一时间想到int数组的排序,简单啊,所谓排序不就是将int数组按照从大到小或者从小到大排序吗,如果我有个数组存放的不是int数据,而是一个个对象呢?你怎么排序?所以我们首先要明确排序的定义:排序指的是将一个数据元素的任意序列,重新排列成一个按照关键字有序的序列。所谓排序最重要的是按照什么排序,就是定义中的关...

2019-01-11 09:54:59 185

原创 Android版数据结构与算法(十一):图的基础以及遍历代码实现

本篇目录一、图定义图是一种较线性表和树更为复杂的数据结构,其定义为:图是由顶点的有穷非空集合与顶点之间边的集合构成,通常表示为:G(V, E), G表示一个图,V表示图中顶点的集合,E表示顶点之间边的集合。如下,就是一个图:二、图术语了解图中数据元素我们称之为顶点,图中任意两个顶点都可能存在关系,顶点之间关系用边来表示。若两个顶点Vi与Vj之间的边没有方向,则称这条边为无向边, 用...

2018-12-27 10:11:06 146

原创 Android版数据结构与算法(十):终极之树-红黑树与TreeMap详细解析

本文目录一、为什么要创建红黑树这种数据结构在上篇我们了解了AVL树,既然已经有了AVL这种平衡的二叉排序树,为什么还要有红黑树呢?AVL树通过定义我们知道要求树中每一个结点的左右子树高度差的绝对值不超过1,其是一颗严格的平衡树,这样构建出来的平衡二叉排序树具有很好的查找性能,但是为了保持其每个结点平衡因子绝对值不超过1的特性在插入或者删除的时候需要的维护成本是很大的,插入或者删除需要大量的...

2018-12-20 09:48:05 581

原创 Android版数据结构与算法(九):AVL树详细讲解

本文目录一、二叉排序树性能问题在上一篇中我们提到过二叉排序树构造可能出现的性能问题,比如我们将数据:2,4,6,8 构造一颗二叉排序树,构造出来如下:这肯定不是我们所希望构造出来的,因为这样一棵树查找的时候效率是及其低下的,说白了就相当于数组一样挨个遍历比较。那我们该怎么解决这个问题呢?这时候就需要我们学习一下二叉平衡树的概念了,本系列设计的二叉平衡树主要包含AVL树以及红黑树,本篇主...

2018-12-11 09:54:22 232

空空如也

空空如也

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

TA关注的人

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