自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Android音频开发之OpenSL ES

关于OpenSL ES OpenSL ES 全称是Open Sound Library for Embedded Systems , 即嵌入式音频加速标准。OpenSL ES 是开源免费、跨平台、针对嵌入式系统优化的硬件音频加速API。它为开发者提供了标准化、高性能、低响应时间的音频功能实现方法...

2018-11-23 17:50:19

阅读数 179

评论数 0

原创 Android使用FFmpeg+Opengles来解码播放视频(二)

上一节已经完成了视频的解码部分,现在来实现视频的渲染。 Demo地址:https://github.com/Huzhuwei1/ffmpegdecoder.git 为什么使用Opengles来做视频渲染? 1.Opengles使用GPU渲染,能分担CPU压力,避免手机发热。...

2018-08-30 11:34:27

阅读数 688

评论数 0

原创 Android使用FFmpeg+Opengles来解码播放视频(一)

前面已经介绍了FFmpeg解码视频的具体流程,现在使用FFmpeg解码视频然后用Opengles来渲染。 Demo地址:https://github.com/Huzhuwei1/ffmpegdecoder.git 注:这里只是简单的实现一下,代码写的比较粗糙,不喜勿喷! 实现...

2018-08-29 21:40:54

阅读数 781

评论数 0

原创 FFmpeg音视频解码

1.播放视频文件的流程 2.FFmpeg解码视频 流程 3.代码流程 3.1 注册协议、格式和编解码器 avformat_network_init(); av_register_all(); 文档中还有一个avcodec_register_all(),是注册所有编解码器,但...

2018-08-18 15:38:28

阅读数 513

评论数 1

原创 ORMLite的集成和使用

Android中最常用的数据库框架有ORMLite和GreenDao,ORMLite相比GreenDao来说更加轻量,并且学习成本也较低。由于ORMLite是基于反射机制工作的,所以相比GreenDao来说效率较低。 在module的build.gradle中添加依赖: compile &...

2019-04-09 12:01:54

阅读数 47

评论数 0

原创 GreenDao集成与使用

GreenDao是一款开源的轻便快捷的数据库框架,无需编写复杂的SQL语句,在性能方面,GreenDao针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小 同时还是支持数据库加密。 一、GreenDao集成 首先在项目的build.gradle中添加: dependencie...

2019-04-08 17:40:35

阅读数 49

评论数 0

原创 Android IPC机制—Binder的工作机制

Binder是一种进程间通信机制 Binder架构 Binder通信机制采用C/S架构 Binder框架中主要涉及到4个角色Client、Server、Service Manager及Binder驱动,其中Client、Server、Service Manager运行在用户空间...

2019-04-07 21:45:13

阅读数 162

评论数 0

原创 Android开源的UI特效

https://www.jianshu.com/p/71bb7c51b9ea

2019-04-07 17:32:36

阅读数 126

评论数 0

原创 Android开源项目

https://www.jianshu.com/p/e494941f687f

2019-04-06 18:22:57

阅读数 29

评论数 0

原创 Android懒加载

什么是懒加载?为什么要用懒加载?### 1、什么是懒加载 懒加载就是当ViewPager和Fragment结合在一起使用时,Fragment呈现在用户面前时才加载数据,当其从未被呈现在用户面前时,不会执行加载数据的代码。这就是我所理解的懒加载。 2、为什么要用懒加载 ViewPager默认...

2019-04-05 17:54:36

阅读数 238

评论数 0

原创 Android应用启动时间优化

背景 应用启动时间是衡量APP用户体验的第一道门,一般情况下应用启动时间在1秒以内,用户会觉得响应时间很快;1-3秒内完成启动,用户会觉得启动速度还可以;超过3秒,用户就会觉得很慢;超过5秒,用户会直接放弃这个应用。 应用启动时间的定义 在Android系统中把启动分为冷启动,热启动,温启动。三者...

2019-04-05 17:22:25

阅读数 141

评论数 0

原创 Picasso源码解析

Picasso的使用 //加载一张图片 Picasso.with(this).load("url").placeholder(R.mipmap.ic_default).into(imageView); //加载一张图片并设置一个回调接口 Picasso.with(this)....

2019-04-04 16:59:56

阅读数 26

评论数 0

原创 Android中CMakeList的编写方法

CMake是一个跨平台的安装编译工具,可以用简短的语句来描述各个平台的安装编译过程。 在CMakeList开头应设置好工程的jni文件目录,比如: set(distribution_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs) 如果有用到第三方库,这里还需要...

2019-04-02 17:40:27

阅读数 263

评论数 0

原创 Android基于Socket的网络编程

服务端: 1.用指定的端口实例化一个ServerSocket对象。 2.调用ServerSocket的accept()方法,以等待连接,并阻塞。 3.利用accept()方法返回的Socket对象,进行IO读写操作。 4.关闭流,回收资源。 代码实现: /** * 基于TCP协...

2019-04-01 11:58:07

阅读数 47

评论数 0

原创 Android应用常用的加密方式

Android数据加密的方式,按加密的内容是否可以还原,可以分为可逆加密和非可逆加密。 非可逆加密: 加密后的数据不能还原成原来的数据,如MD5,sha1。 可逆加密: 可逆加密有一个公钥和一个私钥,通过公钥加密,私钥解密。常用的有:RSA,AES。 MD5 使用场景: 1.一致性验证,比如下...

2019-03-31 16:49:03

阅读数 221

评论数 0

原创 Android线程池的使用

为什么要使用线程池 1.重用线程池中的线程,避免线程的创建和销毁带来的性能开销; 2.能有效的控制线程池中的线程并发数,避免大量线程之间互相抢占资源导致阻塞; 3.能对线程进行简单的管理,并提供定时执行或间隔循环执行任务; ThreadPoolExecutor Android中的线程池概念是来...

2019-03-30 11:46:35

阅读数 33

评论数 0

原创 Android 多渠道打包

多渠道打包是为了统计不同渠道的数据,方便在推广运营过程中进行有效的渠道比较。下面记录几个常用的多渠道打包的方式: 1.友盟多渠道打包 **原理:**在AndroidManifest.xml的Application的Metadata节点下放置各渠道的标识,然后通过java获取对应的渠道信息。 ...

2019-03-29 11:48:35

阅读数 29

评论数 0

原创 Android 进程保活

在系统内存不足的情况下,系统会依据自身的一套进程回收机制来回收掉一些进程,以腾出内存来供给需要的app,这套进程回收机制就叫做Low Memory Killer。然而某些应用需要在后台常驻以满足一些需求,比如后台接收推送消息等。那么如何保持进程常驻呢,总结了如下方案: 1.利用Android前台...

2019-03-28 12:36:27

阅读数 48

评论数 0

原创 Volley源码分析

Volley的简单使用 //获取volley的请求对象 RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext()); StringRequest string...

2019-02-22 18:29:54

阅读数 32

评论数 0

原创 OkHttp源码分析

上面是Okhttp发起一个同步/异步请求时,方法调用流程图。 Okhttp的使用 //设置超时的时间 OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTi...

2019-02-21 18:00:34

阅读数 53

评论数 0

原创 Android热修复——Tinker源码分析

从Tinker的官方文档上可以看到,接入Tinker是在Application中,所以切入点就从Application开始; public class TinkerApplication extends Application { private ApplicationLike t...

2019-02-20 17:25:39

阅读数 132

评论数 0

原创 Android热修复——Tinker集成

前言 现在市场上的热修复工具或者框架有很多很多,除了Tinker比较出名的还有阿里的 AndFix、美团的 Robust 以及 QZone 的超级补丁方案。每个方案的优缺点如下图: 阿里AndFix接入简单,不过兼容性不太好;QZone方案对性能损耗较大并且补丁大小较大;美团的 Robust兼容...

2019-02-20 15:09:50

阅读数 81

评论数 0

原创 Android使用MediaCodec编码AAC

关于MediaCodec MediaCodec 是Android系统提供的硬件编码器,它可以利用设备的硬件来完成编码,从而提高编码效率,并可以减轻CPU压力降低电量的使用,但是必须是4.1以上的系统才可以使用。 MediaCodec编码出来的AAC数据是裸的AAC,即AAC的原始数据块,一个A...

2018-11-30 15:16:03

阅读数 315

评论数 0

原创 Android 音频渲染之AudioTrack

Android平台下的音频渲染在java层有三个API,分别是MediaPlayer、SoundPool和AudioTrack ,它们的使用场景如下: MeidaPlayer : 适合在后台长时间播放本地音乐文件或者在线的流式媒体文件,封装的比较好,使用相对较简单,但是可操作性差。 Sou...

2018-10-27 15:08:51

阅读数 144

评论数 0

原创 Android9 新特性

1.Wi-Fi RTT 进行室内定位 室内WIFI定位 Android P增加了对RTT Wi-Fi协议的支持,以此作为室内定位的基础。 在支持硬件支持的Android P设备上,开启定位并且打开WIFI扫描后就可以使用该功能进行定位。应用可以测量与附近支持RTT的Wi-Fi接入点(AP)的距离...

2018-10-19 15:26:44

阅读数 305

评论数 0

原创 开发笔记——LinkedBlockingQueue

最近工作上收到一个测试问题,在小米4等部分机型上应用容易闪退。然后查到原因是内存溢出,这里记录一下。 错误信息: 然后定位到GL2JNIView这个类 根据错误信息可以知道是创建线程时出现内存溢出,然后再看一下YUVThread class YUVBufferT...

2018-09-07 16:56:05

阅读数 116

评论数 4

转载 Android屏幕适配之dimens适配

相信做手机端的 App 的小伙伴,只要是产品稍微大一点,就会面临屏幕适配的问题,对于适配这个问题,网上众说纷纭,以前虽然有零零散散的看过,但是没有实践过,也是在最近遇到这个需求的情况下才研究了一下,现在...

2018-07-27 12:56:09

阅读数 228

评论数 0

转载 音频涉及的相关概念

在音频开发中,下面的这几个概念经常会遇到。   (1) 采样率(samplerate)  采样率,注意,目前44100Hz是唯一可以保证兼容所有Android手机的采样率。 采样就是把模拟信号数字化的过程,不仅仅是音频...

2018-07-20 18:22:29

阅读数 265

评论数 0

原创 FFmpeg——常用命令行

1、列出ffmpeg 支持的所有格式: ffmpeg -formats 2、剪切一段音视频文件: ffmpeg -i input.mp4 -ss 00:00:50 -codec copy -t 20 output.mp4 讲input.mp4从第10s开始剪切20s的时间且编...

2018-07-13 15:06:27

阅读数 746

评论数 0

原创 开发笔记——图片加载缓存导致的BUG

在使用Glide加载本地图片时遇到这样一个问题:只修改图片内容而不更改它的路径时,发现图片并没有更新替换. 我们都知道像Glide这样的第三方图片加载框架内部都是采用的三级缓存,所以出现这样的问题,肯定是Glide的内存缓存的问题。于是只需要清楚原图片在内存中的缓存就行,具体怎么做如下: Gl...

2018-06-20 11:28:37

阅读数 153

评论数 0

原创 开发笔记——ScrollView嵌套RecyclerView滑动冲突

解决ScrollView嵌套RecyclerView时滑动冲突问题 <ScrollView android:layout_width="match_parent" android:layout_h...

2018-06-20 11:06:40

阅读数 64

评论数 0

原创 Android四大组件之Activity

开启新界面,获取返回值 startActivityForResult setResult onActivityResult Activity的生命周期 什么是生命周期 对象从创建到被垃圾回收过程中一定会执行的 onStart方法在activity界面用户可见的时候调用 onStop方法...

2016-11-16 23:41:58

阅读数 168

评论数 0

原创 安卓中调用用本地服务和远程服务的方法

自己new服务是得不到上下文的 bindService的flags是指 BIND_AUTO_CREATE是指如果服务不存在,就创建它ServiceConnection里未实现的两个方法 分别是 连接成功 取消连接调用的方法对比 startService() 缺陷: 我们不可以调用服务的方法...

2016-11-10 23:14:54

阅读数 690

评论数 0

转载 设计模式

设计模式1、什么是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工...

2016-10-23 22:31:36

阅读数 128

评论数 0

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