自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xyTianZhao

单丝不成线,孤木不成林

  • 博客(94)
  • 资源 (16)
  • 问答 (6)
  • 收藏
  • 关注

原创 Android 图形系统详解

一个页面(Activity)显示到屏幕上流程分析:启动 Activity → 创建 Window → WMS 注册 Window → SurfaceFlinger 创建 Surface → 合成 layer → 显示主要涉及三个进程:App进程、System_server进程、SurfaceFlinger进程

2023-02-08 21:04:46 4043

原创 AOSP 编译真机镜像与AVD镜像

硬件设备当然是配置越高越好,虚拟机编译至少需要16G内存+300G硬盘空间。

2023-10-28 14:19:38 479 2

原创 Android OpenGL 教程——窗口初始化&绘制矩形

上节介绍了,但是我们的窗口什么都没有,这节我们将 NativeActivity 创建的 window 绑定到 OpenGL 创建的 display 的 surface 上,并且绘制背景颜色和三角形,通过三角形绘制出一个矩形。

2023-07-24 20:46:29 453

原创 Android OpenGL 教程——Native 工程初始化

Native 工程初始化

2023-07-21 14:52:33 427

原创 Android 输入系统详解

Android 输入系统的工作原理概括来说,内核将原始事件写入到设备节点中,InputReader 不断地通过 EventHub 将原始事件取出来并翻译加工成 Android 输入事件,然后交给 InputDispatcher。InputDispatcher 根据 WMS 提供的窗口信息将事件交给合适的窗口。窗口的 ViewRootImpl 对象再沿着控件树将事件派发给感兴趣的控件。控件对其收到的事件作出响应,更新自己的画面、执行特定的动作。

2023-05-06 18:15:35 722

原创 OkHttp简析及实现

OkHttp简析及实现还记得 2015 年刚开始学习 Android 那会,还在为 Eclipse 项目中集成 Afinal.jar 、 Volley.jar 爆红而发愁,一晃而过到现在的 2020 年,见证了 AndroidStudio 的兴起。就这短短的5年时间,很多工具和技术都进行了更新换代或者在升级今天我们就看看经过官方承认并使用的网络请求框架 OkHttp。OkHttp简析使用接入 OkHttp先来康康怎么接入,直接 gradle 中一行代码就搞定了。确实比之前还要下载相关 jar 包

2020-08-19 16:03:28 466

原创 EventBus之高效使用

EventBus之高效使用说起 EventBus,作为一名 Android 开发者,应该不会太陌生,但是我们大部分都会根据官方文档直接进行使用,其实还有一种比较高效的使用方式。就是不使用注解的方式,在编译时期,对相关注册方法进行注册。这其实就相当于用空间换时间的一种常规操作了。这里附上 官方源码 和 官方文档 的地址。先来贴一张官方文档中的图解,让大家对 EventBus 的工作机制现有一个宏观上的回忆。常规使用先来看看常规的使用方式。1、接入EventBus implementation

2020-07-01 20:49:07 401

原创 SVG 详解——自定义可点击的中国地图

SVG 详解——自定义可点击的中国地图SVG定义SVG 是一种图像文件格式,类似于 JPG、PNG。只不过 JPG 和 PNG 这种文件需要图像引擎加载,而 SVG 则是由画布来加载的。它的英文全称为 Scalable Vector Graphics,意思就是可缩放的矢量图形。可让你设计无损失、高分辨率的 Web 页面图像。猿猿们就可以用代码来描绘图像,不管怎么缩放都始终保持高清显示,不会...

2020-04-14 17:15:38 2962

原创 Android 事件分发机制分析及源码详解

Android 事件分发机制分析及源码详解文章目录Android 事件分发机制分析及源码详解事件的定义事件分发序列模型分发序列分发模型事件分发对象及相关方法源码分析事件分发总结一般在实际开发中,我们很少主动去处理相关滑动处理,所以就很少关注事件分发相关机制。因为系统已经帮我们处理好了,如:ScrollView、ViewPage、ListView 等。这里我们就以事件分发为入口,来分析一下...

2020-03-09 21:39:39 321

原创 Apk 全面瘦身详解

Apk 全面瘦身详解做 Android 开发的都有经历过,项目的体积大小随着开发时间增长,包体积也会随之增长。想想一个经历过5-6年的项目,如果不做包体积方面的控制和优化,最起码现在得有百兆了,还是一个简单的应用。随着 apk 的体积增大,相应的弊端也就暴露出来了,这也就是我们为什么要进行 apk 瘦身的原因安装包过大,导致很多用户不愿更新和下载安装包过大,导致新用户不愿下载安装包过...

2020-03-04 15:44:43 412

原创 APP 启动优化

APP 启动优化我们 Android 开发永远也摆脱不了性能优化的需求,做的 App 就是给用户用的,随着功能的增加,App启动功能的丰富。点击启动图标时,我们的 App 启动会出现一个白屏页面。这个非常影响交互体验。这节我们就来看看怎么优化这里启动方式首先,我们来看看 App 的启动方式都有哪些冷启动程序从头开始,系统灭有为该程序创建进程。一般有两种场景:1. 程序安装后的第一次...

2020-03-02 14:53:46 251

原创 View 自定义属性之 LayoutInflater

View 自定义属性之 LayoutInflater平常开发中,我们避免不了会自定义 view,自定义 view 的时候可以通过 AttributeSet 来获取自定义的相关属性。而怎么样不通过自定义 view,就能实现自定义相关属性呢,那就要使用自定义的 LayoutInflater 了。原生 LayoutInflater 使用我们先看看原生的 LayoutInflater 是怎么使用的。...

2020-02-28 18:13:35 461

原创 Vsync机制和Choreographer详解

文章目录UI 卡顿定义卡顿原因及常见解决方式VSync定义作用工作原理Buffer 缓存机制单缓存双缓存三缓存Choreographer使用源码分析UI 卡顿定义用户角度:APP 操作比较缓慢,响应不及时,列表滑动卡顿,动画刷新不流畅等系统角度:屏幕刷新帧率不稳定,无法保证每秒60(跟手机有关)帧刷新频率,出现掉帧现象卡顿原因及常见解决方式过度绘制去除不必要背景布局...

2019-11-07 16:42:03 1367 8

原创 Handler 详解

开发中我们经常使用 Handler 来进行线程间的通信。这篇我们就从源码角度来分析一下 Handler 是怎么工作的。

2019-11-05 15:19:25 488

原创 Launch 桌面启动详解

Launch 桌面启动详解不管是开机还是重启手机,相信我们大家都不陌生吧。大部分的 90 后都经历了从 Android 2.* 的统一开机动画,到现在 Android 10 的各种定制开机动画。为什么 Android 系统启动时需要播放一段开机动画呢,而且播放完成后有的性能比较差的机器或者定制度比较高的 Room 都需要在最后一帧动画定格一段时间,是因为 Android 系统启动时首先需要从 ...

2019-11-02 18:21:15 2613

原创 AMS、Activity 启动流程详解

AMS、Activity 启动流程详解概述ActivityManagerService(以后简称AMS)都有所耳闻。AMS 是 Android 中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在 Android 中非常重要。先来看AMS的家族图谱相关类说明ActivityManagerServic...

2019-11-01 17:09:08 1002

原创 PMS启动 APK 安装流程详解

PMS启动 APK 安装流程详解概述PackageManagerService(以下简称 PMS)是一个常用的系统服务,主要负责系统中的 Package 的管理,应用程序的安装、卸载、查询等相关功能。其相关类图如下相关类说明IPackageManager定义了服务端和客户端通信的业务函数,还定义了内部类 Stub ,该类从 Binder 派生并实现了 IPackageManager ...

2019-10-31 17:54:51 2227

原创 Binder 详解

Binder 详解什么是 BinderBinder 是一种进程间通信机制,基于开源的 OpenBinder 实现;OpenBinder 起初由 Be Inc. 开发,后由 Plam Inc. 接手。从字面上来解释 Binder 有胶水、粘合剂的意思,顾名思义就是粘和不同的进程,使之实现通信。Binder 的由来我们知道,Android 系统就是运行在 Linux 系统之上。而 Linux ...

2019-10-30 17:55:43 1119

原创 Android 动画使用及源码分析

Android 动画使用及源码分析Android 动画有如下三类,逐帧动画已经很少使用了,这里就不在说了,这里主要看一下 补间动画 和 属性动画 的加载和渲染逐帧动画补间动画属性动画补间动画补间动画分为如下四类动画属性相关类淡入淡出AlphaAnimation位移TranslateAnimation缩放ScaleAnimation旋转...

2019-10-11 14:07:54 467

原创 Android 音频录制(三)-OpenSL ES

Android 音频录制-OpenSL ES相关推荐音频基础知识Android 音频录制-MeidaRecordAndroid 音频录制-AudioRecordAndroid 音频录制-OpenSL ES

2019-09-29 11:14:18 338

原创 Android 音频录制(二)-AudioRecord

Android 音频录制(二)-AudioRecordAndroid 系统为我们提供了三种录制音频的方式MediaRecord( Java API)AudioRecord( Java API)OpenSL ES( Native API)这次我们来说复杂一点的 AudioRecord。官方API 介绍我们在上节说的 使用MeidaRecord录制,系统已经为我们将数据处理完成,我们只...

2019-09-26 14:19:09 726

原创 音频基础知识

音频基础知识小时候看电视、听广播就在想,这里面的人在哪藏着呢,那么小的空间,咋藏的呢,他也不出来,就在里面瞎BB。直到后来我入了计算机的坑,才发现万事万物皆01。经过后来了解,发现一个声音源要变成 01 数据需要经过以下几个过程。自然声波->模拟信号->数字信号自然声波->模拟信号当我们说话时,麦克风会将自然声波处理转换成为声音的模拟信号。麦克风一般分为以下两种...

2019-09-26 11:18:31 454

原创 Android 音频录制(一)-MediaRecord

Android 音频录制(一)-MediaRecordAndroid 系统为我们提供了三种录制音频的方式MediaRecord( Java API)AudioRecord( Java API)OpenSL ES( Native API)这次我们先从最简单的 MediaRecord 说起系统提供的这个是最简单的录制 API。不用关心编码、不用操作字节码,所有的数据处理内部都已经实现,...

2019-09-25 20:49:36 487

原创 Android WebView 与 Native 交互

Android WebView 与 Native 交互在 Android 开发过程中,难免会用到 WebView 展示一些 H5 页面,这样就免不了需要和 Native 进行一些信息的交互。比如获取当前登陆状态、保存一些值、调起相应页面或者功能等。这里将 H5 与 Android 交互这块封装成了一个模块,有兴趣可以看下 WNBridge,访问不了的可以下载资源先来看一下效果图Andro...

2019-08-29 20:25:42 405

原创 Android 屏幕适配

Android 屏幕适配常见方案限定符适配尺寸限定符限定符描述layout-small小屏幕layout-normal基准屏幕layout-large大屏幕layout-xlarge超大屏幕屏幕方向限定符限定符描述layout-land横向layout-port纵向分辨率限定符限定符描述...

2019-08-29 10:17:35 278

原创 源码分析软键盘弹出失效问题

源码分析软键盘弹出失效问题平常开发中,经常碰到 EditText 输入内容时需要调起软件盘。但是有时发现调用了之后没有生效,软键盘并没有弹出来。通常做法如下,延迟执行,虽然大概率提升了软键盘弹出的几率,但是偶尔还是会失效,没有从根本上解决问题的痛点。editTextView.postDelayed(new Runnable() { @Override ...

2019-08-26 21:47:56 573

原创 Android水波纹效果

Android水波纹效果最近学习了 Paint 和 Canvas 的相关知识,自定义 View 实现了一个水波纹效果注释在代码里面已经补全了。直接看代码即可package com.wuba.demo;import android.animation.Animator;import android.animation.AnimatorListenerAdapter;import an...

2019-08-15 12:58:54 378

原创 Canvas 详解

Canvas 详解这节我们来看一下 Canvas 的相关知识,官方文档有详细的功能说明,这里我们简要了解一下几个常用的功能绘制文本、几何图形、位图接口功能drawText绘制文本drawLine绘制连线drawPath根据给定的Path,绘制连线drawPoint绘制点drawBitmap绘制位图位置形状变换接口功能...

2019-08-13 21:28:04 272

原创 Paint 的ColorFilter(颜色过滤器)和 XFermode(图层混合模式)

Paint 的ColorFilter(颜色过滤器)和 XFermode(图层混合模式)ColorFilter-颜色过滤器顾名思义就是 Paint 画笔的颜色过滤功能。通过 setColorFilter(ColorFilter filter) 方法进行设置,该方法传入了一个 ColorFilter 对象,我们来看下这个是个嘛东东。/** * A color filter can be use...

2019-08-13 11:06:41 641

原创 Paint 详解

Paint 详解Android 中的 Paint 我们可以理解为画画中的画笔,画笔往往有多种颜色和粗细。Paint 只有一个,但是他可以设置相关属性,来实现各种画笔的特性。我们作画时是用画笔在画板上作画,这里的 Paint 就是我们的画笔,画板就是 Android 中的 Cavans 了,这节我们直谈 Paint,Cavans 就不过多介绍。常用 API我们列举出了 Paint 常见的一些 ...

2019-08-07 20:08:33 778

原创 UI 绘制流程及原理全过程解析

UI 绘制流程及原理全过程解析UI 绘制流程类文章在网上一搜一大把,但是都有一定的断层。比如只分析了View的三大流程 onMeasure 、 onLayout 、 onDraw ,但是这三个方法的调用链却没有描述。这篇文章就应运而生。Window 顶层 DecorView 身世我们都知道,通过 startActivity启动一个页面时,如果在 onCreate没有调用 setConten...

2019-08-01 11:23:28 1519

原创 View 的测量 MeasureSpec

View 的测量 MeasureSpec我们平常自定义都是重写 view 的 onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法,而这个方法传入的宽和高都是一个32位 int 值。下面我们揭开这层神秘的面纱。MeasureSpec 解析MeasureSpec 是位于 View 类中的一个静态类,也就 100 行左右。我们先来看其中...

2019-07-30 21:24:46 219

原创 WebView与ListView滑动冲突——(二)LinearLayout控制WebView滚动

上一篇我们大致了解了一下View中 事件的一些基础《WebView与ListView滑动冲突——(一)事件基础篇》,Scroll是为了实现View平滑滚动的一个Helper类,通常在自定义View中使用。 这次我们从一下几个方面来了解一下Scroll与VelocityTracker的用法:View和MotionEvent的位置信息View中的Scroll方法Scroll中的scroll*()方

2017-09-01 09:51:22 932

原创 WebView与ListView滑动冲突——(一)事件基础篇

Android中的事件有很多种,从宏观上来讲我们最常见,最常用的就是onClick事件了,微观上来说就是onTouchEvent、onInterceptTouchEvent、dispatchTouchEvent等方法都具有MotionEvent参数,该Event即为用户一次行为的具体体现。如果其中某一个方法返回true,则代表改方法消费了该事件,则该事件将不会向下传递,其后的ACTION_MOVE、

2017-08-29 20:58:30 894

原创 Android底部弹出Dialog

一.简要先看看效果图把,点击中间的弹出对话框按钮,从底部弹出Dialog,我们可以选择拍照,选择相片,以及取消按钮二.实现首先先看看比较重要的两个文件把1.Dialog的布局文件dialog_layout.xml该布局文件主要是对弹出的Dialog进行布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http:

2017-04-26 17:08:51 3263

原创 Android内存泄漏——常见的内存泄露

JAVA是垃圾回收语言的一种,开发者无需特意管理内存分配。但是JAVA中还是存在着许多内存泄露的可能性,如果不好好处理内存泄露,会导致APP内存单元无法释放被浪费掉,最终导致内存全部占据堆栈(heap)挤爆进而程序崩溃。Java的内存JAVA是在JVM所虚拟出的内存环境中运行的,JVM的内存可分为三个区:堆(heap)、栈(stack)和方法区(method)。栈(stack):是简

2017-04-26 14:07:02 541

原创 Android自定义日历控件

概述日历有阳(公)历、阴(农)历之分,咱们从下面两个方面区分一下(当然,他们的区别还是挺多的,有兴趣的可以研究研究)月份的定义:阳(公)历 一年12 个月,每个月的天数各不同;阴(农)历,每个月固定28天每周的第一天:阳(公)历星期日是第一天;阴(农)历,星期一是第一天好了,咱们言归正传。日历翻译成英文就是Calendar,然而咱们平使用的是阳(公)历,翻译成英文就是GregorianCale

2017-03-28 22:36:51 4101 5

原创 Android自定义键盘的简单实现

自定义键盘的简单实现概述突然发现好多软件都使用了自己定义的软键盘。自己就想着先把这块坑先踩踩把,以后掉坑的时候不至于帅的太惨。言归正传,对于自定义软键盘。需要用到系统提供的两个类:Keyboard和KeyboardView。Keyboard设计键盘的布局文件,官方上对Keyboard是这么解释的Loads an XML description of a keyboard and stores the

2017-03-20 19:59:09 23711 10

原创 Android AIDL的简单应用

Android AIDL的简单应用概要AIDL(Android Interface Definition Language),从字面解释来看就是Android接口协议语言。如果是接口协议语言 那么就跟接口脱离不了关系。通过它我们可以定义进程间的通信接口。什么情况下使用AIDL你能看到这说明你已经知道AIDL是为了跨进成通信使用的。但是已经有了广播、ContentProvider等都可以进行跨进程通

2017-03-16 21:44:26 425

转载 Android OpenGL ES2.0基础(三、Shader相关介绍)

原文链接:http://www.tuicool.com/articles/VZVJra        与OpenGL ES1.x渲染管线相比,OpenGL ES 2.0渲染管线中“顶点着色器”取代了OpenGL ES 1.x渲染管线中的“变换和光照”;“片元着色器”取代了OpenGL ES 1.x渲染管线中的“纹理环境和颜色求和”、“雾”以及“Alpha测试”。 这使得开发人员在使用Op

2017-03-10 10:30:42 1247

EventBusDemo.zip

纯 kotlin 手撸了一个 简易版的CustomEventBus。仅供学习,不能再项目中使用昂!

2020-07-01

WNBridge.zip

Android与WebView进行交互的封装

2019-08-29

CalendarView

该CalendarView只有一个java文件,复制到项目中即可使用

2017-03-28

KeyboardDemo

使用Keyboard进行Android的自定义键盘

2017-03-20

AndroidAIDLDemo

此Demo为两个应用使用AIDL进行数据通信

2017-03-16

OpenGLDemo

在Android中使用OpenGLES20绘制三角形

2017-03-10

MyAdapter万能适配器

该Demo是AS下的一个小例子,里面是一个关于万能适配器的运用。

2015-12-21

ViewPageDemo

该Demo是一个广告图片轮播的实现,有底部指示器

2015-11-26

Volley.jar

Volley.jar对网络请求实现了很好的封装,如:String 请求,json请求,图片请求,文件等。

2015-11-12

MVPLogin.rar

这是一个以登录为例的MVP的小Demo,登录成功后利用回调来通知界面的更改。

2015-10-10

AsyncTask.jar

这是一个使用asynctask类来从网络下载图片的小Demo

2015-09-16

Android-侧滑菜单SlidingMenu

这是一个Android的侧滑菜单的一个小demo,本人亲测,确实可行

2015-07-20

jxl操作excel

一个可以操作Excel的jxl.jar包、niec

2015-06-07

tz_imageloader

使用异步加载+ViewHolder+缓存对Baseadapter进行了优化。优化了OOM问题和上下滑动时的卡顿现象

2015-05-08

压缩解压文件

实现了文件与文件夹的压缩与解压,指定目录输出

2015-05-03

apache-mime4j-0.6

apache-mime4j-0.6 httppost httpclient

2015-04-28

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

TA关注的人

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