自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yhao的博客

最怕庸碌无为,还安慰自己平凡可贵

  • 博客(49)
  • 资源 (9)
  • 收藏
  • 关注

原创 细读《深入理解 Android 内核设计思想》(五)Binder 机制 [下]

对冗余挑拣重点,对重点深入补充,输出结构清晰的精简版深入 binder 驱动内部binder_ioctlbinder_get_threadbinder_ioctl_write_readbinder_thread_writebinder_transactionbinder_thread_read小结binder Q&A如何找到目标进程 Binder 实体如何实现 Binder 线程的睡眠与唤醒最后深入 binder 驱动内部前两篇文章都有提到 binder_ioc

2020-05-17 08:58:43 997

原创 细读《深入理解 Android 内核设计思想》(四)Binder 机制 [中]

对冗余挑拣重点,对重点深入补充,输出结构清晰的精简版智能指针binder 驱动中的结构体ProcessStateIPCThreadStateBpBinderBinderProxyServiceManager getService 流程智能指针在 binder 相关源码可以看到 sp、wp 类型的引用: sp<IBinder> result = new...

2020-05-03 08:50:52 805

原创 细读《深入理解 Android 内核设计思想》(三)Binder 机制 [上]

对冗余挑拣重点,对重点深入补充,输出结构清晰的精简版1.必备知识设备驱动文件描述符页框2.Binder 概述3.binder 驱动binder_openbinder_mmapbinder_ioctl4.Service Manager启动注册与查询5.最后必备知识设备驱动Linux 把所有的硬件访问都抽象为对文件的读写、设置,这一"抽象"的具体实现就是驱动程序。...

2020-04-23 00:59:29 781

原创 细读《深入理解 Android 内核设计思想》(二)内存管理

对冗余挑拣重点,对重点深入补充,输出结构清晰的精简版1. 操作系统内存管理基础虚拟内存内存分配与回收mmapCopy on Write2. Android 内存管理Low Memory KillerAshmem 驱动MemoryFile 原理3. 总结操作系统内存管理基础不论什么操作系统,内存管理都是绝对的重点和难点。内存管理旨在为系统中所有 Task 提供稳定可靠的内存...

2020-04-12 00:30:05 614

原创 细读《深入理解 Android 内核设计思想》(一)进程间通信与同步机制

对冗余挑拣重点,对重点深入补充以更易理解且简洁的方式记录呈现不是杂乱无章的笔记,而是原书的"精简版"进程间通信的经典实现进程间通信(Inter-process communication,IPC)指运行在不同进程中的若干线程间的数据交换,可发生在同一台机器上,也可通过网络跨机器实现,以下几种因高效稳定的优点几乎被应用在所有操作系统中,分别是共享内存、管道、UNIX Domain Soc...

2020-04-06 17:23:16 638

原创 Android 10 startActivity 源码分析

源码基于 Android 10此图着重提炼了生命周期的部分,Android 10 中 新增了 ActivityTaskManager ,专门用于管理 Activity,接替了 ActivityManager 的一部分工作理解 InstrumentationActivity 首先会通过 Instrumentation 去调用,Instrumentation 中包含 callActivi...

2020-04-06 17:21:04 3503 3

原创 Android OpenGL ES(二)绘制三角形

通过上篇文章的学习,现在已经了解到,要想在 Android 端使用 OpenGL ES 绘制图形,必须创建 OpenGL ES 环境和视图窗口,具体来说就是构建 EGL 环境,即 OpenGL ES 和 Android 底层平台视窗系统之间的接口。另外 OpenGL ES 2.0 版本为可编程管线,我们就可以编写着色器程序来确定绘制内容,即编写 Vertex Shader 顶点着色器和 Fragm...

2020-04-06 16:59:59 737

原创 Android OpenGL ES(一)开发入门

早就听过大名鼎鼎的 OpenGL,却迟迟没有实践学习,有些惭愧。今天开始通过实践+博文方式学习掌握 OpenGL。此文对于 OpenGL 的学习分为以下部分:OpenGL 基础概念OpenGL 坐标系理解OpenGL 渲染管线OpenGL 着色语言OpenGL 基础概念OpenGLOpenGL 即 Open Graphics Library,是一个功能强大、调用方便的底层图形库...

2020-04-06 16:57:14 1906

原创 Android 集成 FFmpeg (三) 获取 FFmpeg 执行进度

在以命令方式调用 FFmpeg 的时候,可能会执行一些比较耗时的任务,这时如果没有进度展示,用户可能会以为程序崩溃了,体验十分不好.能不能在以命令方式调用 FFmpeg 时实时获取执行进度呢?谷歌关键词 "Android FFmpeg 命令" 可以得到很多教程,但加上关键词 "进度"就没有相关文章了,看来以命令方式调用 FFmpeg 实时获取执行进度这个需求没有前人的肩膀可站,要开动自己的小脑筋了.

2017-12-17 22:03:26 6450 6

原创 Android 应用内悬浮控件实践总结

在工作中遇到一个需求,需要在整个应用的上层悬浮显示控件,目标效果如下图:首先想到的是申请悬浮窗权限,OK~ 打开搜索引擎,映入眼帘的并不是如何申请,而是“Android 悬浮窗权限各机型各系统适配大全、Android 绕过权限显示悬浮窗…”,为什么悬浮窗权限会有这么多坑呢?悬浮窗可以在桌面显示,被恶意软件用来偷偷弹广告怎么办?作为一个系统级别的特殊权限,这是它应有的高傲

2017-11-16 19:33:11 14324 34

原创 一句代码搞定 RecycleView 侧滑菜单、添加头部底部、加载更多

在动手打造史上最简单的 Recycleview 侧滑菜单中,萌生了将这种方案封装为一个开源库的想法,旨在实现调用方式最简单,且又不失可定制性。本库最大的特点的是采用了 Glide 简洁明了的链式调用方式,一句代码即可添加侧滑菜单、头部底部等。

2017-09-08 10:14:35 5435 28

原创 Android 集成 FFmpeg (二) 以命令方式调用 FFmpeg

网上教程实现 FFmpeg 内部日志输出到 logcat 的并不多,但这一步是十分有必要的。很多教程中需要将 ffmpeg 中的 main 方法名字修改为 "run" 、"exec" 等等,其实完全没必要,为什么要对方法名这么在意,乃至不惜徒增新手学习的复杂度呢? 我不知道修改的原因和意义所在。 有些教程中需要把 config.h 文件也拷贝到 jni 目录下,而我并没有拷贝,那么到底需不需要呢?FFmpeg 的命令

2017-08-29 12:00:50 14610 36

原创 动手打造史上最简单的 Recycleview 侧滑菜单

Recycleview 侧滑菜单大多的实现思路是:通过自定义 Recycleview 或 Adapter 提供创建菜单方法,然后内部再关联到各个 item 改变其布局,从而使 item 具有侧滑功能,优点是使用简单,但是不够灵活,比如开始提到的三个局限性。本文实现方法直接在 item 布局中进行设置,使 item 具有侧滑功能,实现过程及其简单,易于理解,应该是最简单的 Recycleview 侧滑菜单了,希望能给

2017-08-19 11:27:06 47181 27

原创 Android 集成 FFmpeg (一) 基础知识及简单调用

本系列第二篇:Android 集成 FFmpeg (二) 以命令方式调用 FFmpeg前言网上关于 Android 集成 FFmpeg 的文章很多,但大多数都只介绍了步骤,没有说明背后的原理,若之前没有集成底层库的经验,那就会“神知无知”的走一步看一步,出错几率很大,出错了也不知道原因,然后会乱猜“这篇教程有问题“,“换个版本估计可以”,甚至“电脑有问题,重装下系统试试”。为什么会

2017-08-12 23:28:19 38786 24

原创 Ubuntu16.04 Caffe 安装步骤记录(超详尽)

历时一周终于在 ubuntu16.04 系统成功安装 caffe 并编译,网上有很多教程,但是某些步骤并没有讲解详尽,导致配置过程总是出现各种各样匪夷所思的问题,尤其对于新手而言更是欲哭无泪,在我饱受折磨后决定把安装步骤记录下来,尽量详尽清楚明白,避免后来小白重蹈覆辙。安装硬件: intel i5 + NVIDIA 740 M安装流程细分为如下10个步骤,细化步骤粒度更易避免出错

2017-05-19 19:09:11 266601 215

原创 Java-并发编程知识点总结

目录:线程基础线程池各种各样的锁并发容器原子类Java 内存模型线程协作AQS 框架一、线程基础1. 为什么继承 runnable 接口比继承 Thread 类的线程实现方式好?可以把不同的执行内容解耦,全责分明某些情况可以减少开销,提高性能(比如可用线程池中已有的线程去执行 runnable,而不用重新创建线程)继承 Thread 类的单继承特性会限制代码的扩展性2. 线程是如何在 6 种状态之间转化的?线程的 6 种状态:New(新创建)、Runnable(可运

2020-10-26 12:44:32 521

原创 Glide 源码分析

Glide 作为一个出色的图片加载框架,对其剖析的文章数不胜数。而若像大多数文章一样常规的去分析源码就没什么新意了,本文旨在发掘一些新的或相对陌生的知识点,以完善对 Glide 的认知,涉及源码基于 v4.8.0。主要内容:1.磁盘缓存2.内存缓存3.网络请求4.图片转换5.感知生命周期6.下载及预加载7.加载图片到通知栏和应用小部件中8.图片格式及内存优化9.请求优先级及原...

2020-04-06 17:19:11 550

原创 视频相关的理论知识与基础概念

本文将视频相关的理论知识与基础概念划分为 11 个知识点,如下:视频分辨率比特率采样率帧率视频编码编码标准视频封装格式视频解码视频播放原理视频与流媒体1.视频根据人眼视觉暂留原理,每秒超过 24 帧的图像变化看上去是平滑连续的,这样的连续画面叫视频。2.分辨率分辨率是以横向和纵向的像素数量来衡量的,表示平面图像的精细程度。视频精细程度并不只取决于视频分辨率,还取...

2020-04-06 17:16:21 3618

原创 Android 端音频变声方案

音频变声实质上是通过调整 PCM 数据的音调、节拍等属性,实现听感上的变化。如果是 mp3、aac 等压缩音频,则需提前解码成 PCM 数据,Android 端可以通过 MediaExtractor 及 MediaCodec 解码得到 PCM,但调整音调、节拍仅靠 Android api 就无能为力了,只能集成第三方库来实现,常见的音频处理库有 Fmod 、 SoundTouch 。Fmod...

2020-04-06 17:12:08 3891 2

原创 简洁明了的刘海屏适配方案

网上关于刘海屏适配的文章不少,可讲清楚的却没几篇,大多是拷贝文档、长篇大论,甚至热情的贴图告诉你什么是刘海屏,到最后你仍不确定到底是怎样的一个适配方案,才能让你的 app 真正的适配所有的刘海屏机型。看到这篇文章你就无需再怨恨各大厂商的跟风“刘海”了,因为刘海屏的适配十分简单。ok,废话说完了,开始适配。首先要清楚的是哪些界面需要适配刘海屏:有状态栏的界面:刘海区域会显示状态栏,无需适...

2020-04-06 17:05:32 551

原创 单例的线程安全及序列化问题

单例模式可以说是最简单的设计模式了,但在使用时也有一些问题需要注意,比如线程安全性和序列化破坏。本文以几个问题为出发点,分析延迟加载、线程安全以及序列化三个方面,深入了解一下单例模式的各种姿势,以便在今后使用时追求极致性能 ⊙﹏⊙‖∣°饿汉方式单例到底有多“饿”?静态内部类为什么是延迟加载的?枚举方式单例是延迟加载的吗?饿汉、静态内部类、枚举方式单例为什么是线程安全的?序列化为什么...

2020-04-06 17:03:32 540

原创 Android 集成 FFmpeg (四) 轻松实现一个音视频编辑 App

在网上看到一篇关于 FFmpeg 的文章,讲的大概是基于 FFmpeg 实现了一个 App,支持视频拼图等强大炫酷的音视频编辑功能,其原理是在 Android 端集成 FFmpeg,通过命令方式调用 FFmpeg。尽管在 Android 端集成命令方式调用并不复杂,但一个具有强大炫酷音视频编辑功能的 App 是有价值的。由此启发,并决定敲下 Android 集成 FFmpeg 系列的第四篇,以一...

2020-04-06 16:51:00 1272 1

原创 一款纯 Kotlin 编写的开源安卓应用 "Smile"

我从对 Kotlin 一窍不通,到完整开发出此 App,共用了 9 天,其中有 4 天只在晚上开发,也就是说共计 5 天 + 4 个晚上。另外由于我对 ui 的挑剔,主题色的挑选及 logo 设计至少占去五分之一的时间。我并不是在炫耀我的自学能力,Smile 的内容并不算多,肯定有很多大牛比我快,我想表达的是这 9 天的学习及开发过程是刀过竹解、得心应手的。所以我想把这个学习过程分享给大家,只要能帮到一个人,那就是有

2017-09-11 21:16:49 5969 7

原创 全面掌握 Java 内部类

一直以来以为自己对 java 基础甚是清楚,然而面试时却连内部类和静态内部类的区别都无法回答圆满,so~重新学习一遍,彻底掌握内部类。内部类是一种非常有用的特性,它可以把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,下文中内部类均指非静态内部类。内部类的学习分为以下10个知识点:1.创建内部类与连接外部类 2.内部类与向上转型 3.局部内部类 4.匿名内部类

2017-05-24 16:20:16 3456

原创 Android 基于TCP的 Socket 编程实现(结合 okio)

两个进程如果要进行通讯最基本的一个前提就是能够唯一的标识一个进程,在本地进程通讯中我们可以使用 PID 来唯一标识一个进程,但 PID 只在本地是唯一的,网络中两个进程 PID 冲突几率很大,这时我们就需要通过其他手段来唯一标识网络中的进程了,我们知道 IP 层的 ip 地址可以唯一标示主机,而 TCP 层协议和端口号结合就可以唯一标示主机的一个进程了。

2017-03-31 16:35:17 32933 7

原创 DataBinding 与 mvvm 模式(二)其他类型数据绑定

本文介绍绑定颜色数据、绑定本地图片资源以及绑定网络图片三个案例,对于除了文本类型数据之外的其他类型数据,我们可以通过改造 getXxx 和 @BindingAdapter 注解两种方法实现绑定,推荐使用 @BindingAdapter 注解方式,因为它更加灵活易用。当然实际开发中会涉及到 ListView 、GridView 等复杂控件,下篇文章将介绍这些复杂控件如何实现 DataBinding ,欢迎关注哦~

2017-03-29 21:01:57 2889

原创 DataBinding 与 mvvm 模式(一)文本类型数据绑定

Google 说:世界上已经31个 findViewById 的插件了,不过 Google 推出了最后一个那就是 DataBinding。数据绑定的主创甚至说了:我们发布得太晚了,这个东西应该在7,8年前我们发布 Android 的时候就推出的。所以,还在犹豫什么呢?快在你的项目中使用起来吧!

2017-03-29 16:17:31 3329

原创 由Android属性动画原理联想到DataBinding

看到这个标题的时候你可能会有疑问,属性动画和 DataBinding 之间有什么关系?我个人理解的是:它们内部的实现思想有相似之处。这篇文章主要对 Android 属性动画的知识通过文字进行整理记录,内容参考于《Android开发艺术探索》,在最后会给出我如此理解属性动画和 DataBinding 的原因。Android动画概述:Android 的动画可以分为三种:V

2017-03-22 21:35:35 1543

原创 自定义View的套路

自定义View是综合的技术体系,它涉及View的层级结构、事件分发机制和View的工作原理等技术细节。自定义View的分类1.继承View重写onDraw方法 这种方法主要用于实现一些不规则的效果,需要通过绘制的方式实现,即重写onDraw方法,采用这种方式需要自己支持wrap_content,并且padding也要自己处理。2.继承ViewGroup派生特殊的Layout 这种方法主要用于实现

2017-03-13 21:33:57 2336 2

原创 事件分发机制与滑动冲突

在界面中内外两层同时可以滑动,就产生了滑动冲突,如何解决滑动冲突呢?其实这是一件非常简单的事,因为滑动冲突的解决有固定的套路,只要知道了这个固定套路,问题就十分容易解决了。常见的滑动冲突场景可分为以下三种:场景1:外部滑动方向和内部滑动方向不一致 ViewPager和Fragment组成的页面中包括一个ListView,这种情况是有滑动冲突的,但是ViewPager内部处理了这种滑动冲突,因此采用

2017-03-12 21:13:43 1441

原创 Android网页爬虫

静态页面需求:获取http://blog.csdn.net/yhaolpz?viewmode=contents页面的title首先通过okhttp以get方式请求页面: final String url = "http://blog.csdn.net/yhaolpz?viewmode=contents"; Request request = new Request.B

2017-03-03 17:34:33 6323 3

原创 Okio源码分析

square在开源社区的贡献是卓越的,这里是square在Android领域贡献的开源项目。1. okio概念okio是一个由square公司开发的开源库,它弥补了Java.io和java.nio的不足,能够更方便快速的读取、存储和处理数据。okio有自己的流类型Source和Sink,对应于java.io的InputStream和OutputStream。 okio内部引入了ByteStr

2017-02-16 17:24:54 11418 2

原创 ListView(2)SimpleAdapter与SimpleCursorAdapter详解

SimpleAdapter官方定义: An easy adapter to map static data to views defined in an XML file. 一个简单的适配器,将静态数据映射到一个XML文件中定义的视图。上面定义有两点引起了我的注意:简单、静态数据。我想知道设计人员在设计这个适配器的时候为什么把它叫做简单适配器,简单这个形容词描述的是什么属性?静态数据的

2016-06-11 19:14:31 13255 9

原创 ListView(1)控件架构与ArrayAdapter详解

ListView是Android开发中比较常用的一个组件,它以列表的形式展示信息,并能根据信息的长度自适应显示。比如说我们手机里的通讯录就用到了ListView显示联系人信息。在大量的场合下,我们都需要使用这个控件。虽然在Android 5.0时代,RecyclerView在很多地方都在逐渐取代ListView,但ListView的使用范围依然非常的广泛。我们也不能跳过ListView直接去学习Re

2016-06-10 23:56:33 6025

原创 Java中的反射机制

在我的上篇文章模拟JDK动态代理实现中涉及到了反射机制,学无止境,在此系统的学习一下Java中的反射机制。首先给出Java反射机制的定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。从以上的描述中可以看出Java中的动态特性,那么

2016-06-03 12:50:49 8814 1

原创 模拟JDK动态代理实现

JDK动态代理在JDK1.3以后提供了动态代理的技术,允许开发者在运行期创建接口的代理实例。在Sun刚推出动态代理时,还很难想象它有多大的实际用途,现在动态代理是实现AOP的绝好底层技术。JDK的动态代理主要涉及java.lang.reflect包中的两个类:Proxy和InvocationHandler。其中InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并

2016-06-01 19:46:37 8467

原创 与接口相关的设计模式(2):代理模式、标识类型模式及常量接口模式

在上文 与接口相关的设计模式(1) 中,详细介绍了定制服务模式和适配器模式,下面我们来看第三种与接口相关的模式:代理模式。代理模式定义:为对象提供一种代理,以控制对这个对象的访问。分类:远程代理(Remote Proxy)—为不同地理的对象提供局域网代表对象。(类似于客户端和服务器端)虚拟代理(Virtual Proxy)—根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建。(网页中

2016-05-23 22:01:24 7653

原创 与接口相关的设计模式(1):定制服务模式和适配器模式详解

在Java中我们通常把接口作为系统与外界交互的窗口,接下来我们来考虑以下问题:如何设计接口?当两个系统之间接口不匹配时,如何处理?但系统A无法便捷的引用系统B的接口的实现类实例时,如何处理?……为了解决以上问题,需要引入与接口相关的设计模式,接下来介绍定制服务模式、适配器模式、默认适配器模式、代理模式、标识类型模式和常量接口模式。- 定制服务模式

2016-05-20 20:16:19 3151

原创 整数类型变量赋值与码制

如果一个整数值在某种整数类型的取值范围内,就可以把它直接赋给这种类型的变量,否则必须进行强制类型的转换。例如整数66在byte类型的取值范围(-128~127)内,因此可以把它直接赋给byte类型变量。byte b = 66;但是如果不在byte类型的取值范围(-128~127)内,则必须进行强制类型的转换,比如129。byte b = (byte)129; // 那么问题来了 b = ?在研究这

2016-05-13 21:22:45 3725

原创 Java设计模式之创建型模式

单例模式应用场合:在一个JVM中,该对象只需有一个实例存在特点:对于创建频繁的大型对象可以降低系统开销减轻GC压力(Garbage collection)安全(核心交易引擎)实现方式:加载类时直接创建类的实例(性能提前消耗 浪费)public class Singleton { private Singleton(){}; private

2016-05-12 16:11:07 3692

kotlin-docs.pdf

近日召开的 Google IO 2017 , Google 将 Kotlin 列为 Android 官方开发语言了,Android Studio 3.0 也默认集成了 Kotlin plugin,那 Kotlin 是什么?

2017-09-02

mp3 测试文件 ( Android 端集成 ffmpeg )

mp3 测试文件 , 详细: Android 集成 FFmpeg (二) 以命令方式调用 FFmpeg http://blog.csdn.net/yhaolpz/article/details/77146156

2017-08-28

lame-3.99.5 Android端(arm架构 ) so库

lame-3.99.5 版本 编译好的 Android端(arm架构 ) so库,用于 mp3 编码,详细:http://blog.csdn.net/yhaolpz/article/details/76408829

2017-08-11

caffe Makefile.config

Ubuntu 16.04 + cuda8.0 + opencv3.1 + cudnn + python 环境下的 caffe 编译文件 Makefile.config ,详细:http://blog.csdn.net/yhaolpz/article/details/71375762

2017-05-19

train-images-idx3-ubyte

caffe mnist 训练所需图片数据

2017-05-09

t10k-labels-idx1-ubyte

caffe mnist 所需数据

2017-05-09

t10k-images-idx3-ubyte

caffe mnist 所需数据

2017-05-09

okio-1.6.0.jar

okio-1.6.0.jar

2017-02-13

okio-1.11.0.jar

okio-1.11.0.jar

2017-02-09

空空如也

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

TA关注的人

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