自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jeanboy

Android | iOS | Web 开发者,专注移动开发领域,热爱分享,热爱开源。

  • 博客(229)
  • 资源 (4)
  • 收藏
  • 关注

原创 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系

Android - SurfaceFlinger 图形系统概述Android 系统启动过程Activity 创建过程Activity 与 Window 与 View 之间的关系通过前面的知识我们知道了,Android 系统从按下开机键到桌面,从桌面点击 App 图标到 Activity 显示的过程。但是 Activity 是怎么显示在屏幕上的呢?下面我们就来讨论下这一过...

2018-03-08 13:49:11 42297 18

原创 一篇文章看明白 Activity 与 Window 与 View 之间的关系

Android - Activity 与 Window 与 View 之间的关系概述我们知道 Activity 启动后就可以看到我们写的 Layout 布局界面,Activity 从 setContentView() 到显示中间做了什么呢?下面我们就来分析下这个过程。如不了解 Activity 的启动过程请参阅:Activity 启动过程本文主要对于以下问题进行分析:Wi...

2018-03-01 10:24:31 37787 7

原创 一篇文章看明白 Android 从点击应用图标到界面显示的过程

Android - Activity 启动过程概述从点击桌面应用图标到应用显示的过程我们再熟悉不过了,下面我们来分析下这个过程都做了什么。本文主要对以下问题分析:ActivityThread 是什么,它是一个线程吗,如何被启动的?ActivityClientRecord 与 ActivityRecord 是什么?Context 是什么,ContextImpl,Contex...

2018-02-12 17:40:41 26830 13

原创 一篇文章看明白 Android 系统启动时都干了什么

Android - 系统启动过程计算机是如何启动的?首先熟悉一些概念,计算机的硬件包括:CPU,内存,硬盘,显卡,显示器,键盘鼠标等其他输入输出设备。 所有的软件(比如:操作系统)都是存放在硬盘上,程序执行时需要将程序从硬盘上读取到内存中然后加载到 CPU 中来运行。 当我们按下开机键时,此时内存中什么都没有,,因此需要借助某种方式,将操作系统加载到内存中,而完成这项任务的就是 BIO...

2018-01-26 17:32:44 18678 10

原创 一篇文章看明白 HTTP,HTTPS,SSL/TLS 之间的关系

HTTP,HTTPS,SSL/TSL概述什么是 HTTP ?超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。【摘自百度百科】伴随着计算机网络和浏览器的诞生,HTTP1.0 也随之而来,处于计算机网络中的应用层,HTTP 是建立在 TCP 协议之上,所以 HTTP ...

2017-07-31 11:50:04 32594 12

原创 一篇文章看明白 TCP/IP,TCP,UDP,IP,Socket 之间的关系

TCP/IP,TCP,UDP,IP,Socket概述什么是 TCP/IP?TCP,UDP 有什么区别?什么是 Socket?网上这方面的资料有很多,但都很琐碎,没有系统化,要么看完很快就忘记了,要么就是看完迷迷糊糊似懂非懂,下面我们来一一攻破以上问题。TCP/IP计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、...

2017-05-16 11:05:04 50652 5

原创 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制

Android-Binder进程间通讯机制概述最近在学习Binder机制,在网上查阅了大量的资料,也看了老罗的Binder系列的博客和Innost的深入理解Binder系列的博客,都是从底层开始讲的,全是C代码,虽然之前学过C和C++,然而各种函数之间花式跳转,看的我都怀疑人生。毫不夸张的讲每看一遍都是新的内容,跟没看过一样。后来又看到了Gityuan的博客看到了一些图解仿佛发现了新大...

2017-04-11 18:12:53 77609 58

原创 【流光溢彩】物联网入门 - ESP8266 + WS2812B 制作流光溢彩灯带

如果灯珠超过 100 颗,供电不要直接通过 ESP8266 自带的 MicroUSB 供电,否则会烧坏模块的供电电路,尽量使用 5V/6A 电源,所以我这里买了一个 5V/6A 的 DC 电源。在此页面填入你的灯珠的数量,并把弹出的方框用鼠标拖动到对应的灯珠位置并调整大小,点第几个方框灯带上对应的第几颗灯珠就会亮,直到把所有方框全部拖到对应位置。打开设备管理器,打开端口,连上你的 esp8266,记住新增的端口是 com 几,我的是 com3。

2023-06-21 17:06:44 2202

原创 Hook 实战之 Hook AMS

本文 Android 系统源码基于 9.0我们知道新建一个 Activity 之后我们需要在 manifest 中注册,否则启动的时候就会崩溃,现在使用 Hook 的方法绕过检查来启动一个没有注册的 Activity。如果我们不注册的话就会报下面的错误:Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.jeanboy.app.hooktrainning/.

2020-10-09 20:15:39 4148 7

原创 Hook 技术初探

最近在研究插件化技术,插件化的中经常会使用到 Hook 技术,查阅了很多资料这里总结下讲的比较好的,希望对大家有所帮助。Hook 技术Hook 是钩子的意思,在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而钩子的意思,就是在事件传送到终点前截获监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。较为形象的流程如下图所示。Hook 的这个本领,使它能够将自身的代码「融入」被勾

2020-08-31 09:00:04 2641

原创 不得不学之代理模式

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。代理模式 UML 类图静态代理由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。UserServicepublic interface Us

2020-05-28 09:11:35 951

原创 聊聊反射

反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。Oracle 官方对反射的解释是:Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructor

2020-05-26 08:49:40 555

原创 性能优化系列(七)APK 体积优化

文章首发「Android波斯湾」公众号,更新地址:https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode减少应用程序安装包的大小,不仅仅减少了用户的网络数据流量还减少了下载等待的时间。毋庸置疑,尽量减少程序安装包的大小是十分有必要的。通常来说,减少程序安装包的大小有两条规律:要么减少程序资源的大小,要么就是减少程序的代码...

2020-03-04 15:48:39 2358

原创 性能优化系列(五)网络性能优化

移动互联网时代,用户对网络越来越依赖。虽然网络环境在逐渐变好,但也对网络的应用提出了更高的要求,同时开发人员对网络的重视度却在下降。确实 WiFi 场景下用户的网络质量变好了,而且用户对网络流量消耗的敏感度也在下降。由于对网络问题的忽视,在网络情况不好的情况下,用户体验会极度下降,这时网络性能优化变得尤为重要。作为一名移动开发者,面对复杂多变的移动网络我们该如何去优化呢?优化哪些方面?一个数...

2020-03-02 09:45:54 5195

原创 性能优化系列(四)电量性能优化

耗电设备手机各个硬件模块的耗电量是不一样的,有些模块非常耗电,而有些模块则相对显得耗电量小很多。电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情。唯一可行的方案是使用第三方监测电量的设备,这样才能够获取到真实的电量消耗。屏幕当设备处于待机状态时消耗的电量是极少的,以 Nexus 5 为例,打开飞行模式,可以待机接近 1 个月。可是点亮屏幕,味着系统的各组件...

2020-02-28 11:31:00 1530

原创 性能优化系列(三)内存性能优化

Android 为每个应用分配内存时,采用弹性的分配方式,即刚开始并不会给应用分配很多的内存,而是给每一个进程分配一个「够用」的内存大小,这个大小值是根据每一个设备的实际的物理内存大小来决定的。随着应用的运行和使用,Android 会为应用分配一些额外的内存大小。但是分配的大小是有限度的,系统不可能为每一个应用分配无限大小的内存。总之,Android 系统需要最大限度的让更多的进程存活在内存中...

2019-12-28 10:26:33 1253

原创 性能优化系列(二)告别卡顿与 ANR —— 计算性能优化

上一篇文章 渲染性能优化 中,我们分析了 UI 可能引起卡顿原因。卡顿的因素有很多,UI 只是其中一个因素。应用是否流畅往往也与 CPU 的计算性能有关,接下来我们从代码上来分析下引起性能问题的因素。ArrayMap 与 HashMapArrayMap 是 Android 提供的工具类,在 android.util.ArrayMap 中,ArrayMap 的使用方式与 HashMap 几乎没有...

2019-12-05 22:39:35 1891

原创 性能优化系列(一)找出卡顿的元凶 —— 渲染性能优化

一个 Android 应用是否流畅,或者说是否存在卡顿、丢帧现象,都与 60fps 和 16ms 有关。那么这两个值是怎么来的呢?为什么以这两个值为衡量标准呢?本文主要讨论下渲染性能方面决定 Android 应用流畅性的因素。为什么是 60fps?12fps(帧/秒)由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约 10 - 12fps 的时候,就会认为是连贯的。 早期的无声电影...

2019-11-19 08:05:17 4507

原创 字节码指令

虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,其区别在于物理机的执行引擎是直接建立在 CPU 处理器、指令集、操作系统和硬件层面上的。而虚拟机的执行引擎则由自己实现,因此可以制定自己的指令集和执行引擎的结构体系,而且还可以执行一些不被硬件直接支持的指令集格式。这就是虚拟机相对于物理机的优势所在。但是缺点也比较明显,由于多了一层虚拟指令,执行虚拟机指令后还要转化为本地机器码,所以在...

2019-10-20 11:07:18 730

原创 字节码文件结构

我们都知道 .java 文件在执行之前会编译成 .class 文件后再执行。比如下面的代码:package com.jeanboy.jvm;public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); }}在 ...

2019-09-03 07:23:40 1184 2

原创 TreeMap 源码分析(下)

引言通过上一篇TreeMap 源码分析(上)的分析,我们已经了解了红黑树插入数据的操作,本文我们继续来分析红黑树删除数据的操作。红黑树的删除将红黑树内的某一个节点删除。需要执行的操作依次是:首先,将红黑树当作一颗二叉查找树,将该节点从二叉查找树中删除;然后,通过「旋转和重新着色」等一系列来修正该树,使之重新成为一棵红黑树。详细描述如下:第一步:删除节点将红黑树当作一颗二叉查找树,将节点删...

2019-08-17 15:43:25 431

原创 TreeMap 源码分析(上)

简介TreeMap 最早出现在 JDK 1.2 中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于 红黑树 实现,可保证在 log(n) 时间复杂度内完成 containsKey、get、put 和 remove 操作,效率很高。另一方面,由于 TreeMap 基于红黑树实现,这为 TreeMap 保持键的有序性打下了基础。总的来说,TreeMap 的核心是红黑树,其很多...

2019-08-07 08:39:09 580

原创 Android 签名机制 v1、v2、v3

什么是签名?要想知道签名是什么,先来看为什么需要签名 ?了解 HTTPS 通信的同学应该知道,在消息通信时,必须至少解决两个问题:一是确保消息来源的真实性,二是确保消息不会被第三方篡改。在安装 APK 时,同样需要确保 APK 来源的真实性,以及 APK 没有被第三方篡改。如何解决这两个问题呢?方法就是开发者对 APK 进行签名:在 APK 中写入一个「指纹」。指纹写入以后,APK 中有任...

2019-07-31 08:48:57 3167 1

原创 聊聊 Activity 栈的亲和关系

launchMode<activity android:name=".ui.activity.TaskAffinityActivity" android:launchMode="singleTask" />standardsingleTopsingleTasksingleInstance默认模式是 standard,这些模式分为两大类,standard 和 s...

2019-07-11 08:51:22 1562

原创 很少有人知道的 ContentProvider 使用技巧

简介ContentProvider 是 Android 的四大组件之一,可见它在 Android 中的作用非同小可。它主要的作用是实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你可以在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限。ContentProvider 可以理解为一个 Android 应用对外开放的接口,只要是符合...

2019-07-04 10:21:38 758

原创 图解 Android 系列(四)原来 SystemServer 启动时干了这么多

介绍这是一个连载的系列「图解 Android 系列」,我将持续为大家提供尽可能通俗易懂的 Android 源码分析。所有引用的源码片段,我都会在第一行标明源文件完整路径。为了文章篇幅考虑源码中间可能有删减,删减部分会用省略号代替。本系列源码基于:Android Oreo(8.0)SystemServer.main()在上篇 探索 SystemServer 进程创建过程 中介绍了 S...

2019-07-02 08:40:28 2281

原创 LinkedList 源码分析

简介LinkedList 是 Java 集合框架中一个常用的集合类,底层采用双向链表结构。和 ArrayList 一样,LinkedList 也支持空值和重复值。由于 LinkedList 基于链表实现,存储元素过程中,无需像 ArrayList 那样进行扩容。但有得必有失,LinkedList 存储元素的节点需要额外的空间存储前驱和后继的引用。另一方面,LinkedList 在链表头部和尾部...

2019-06-25 14:04:31 1319

原创 屏幕适配最佳实践

基本概念屏幕尺寸手机屏幕对角线的物理尺寸。单位英寸(inch),一英寸大约 2.54cm。常见的手机屏幕尺寸有 4.7 英寸、5.0英寸、5.5 英寸、6.0 英寸等。像素(px)像素(英语:Picture Element),Pixel 的缩写。液晶屏显示图像,放大来看是一个个小点组成的,这些小点就是像素点。分辨率分辨率(英语:Image resolution),又称解析度、解像...

2019-06-11 15:10:43 926

原创 图解 Android 系列(三)探索 SystemServer 进程创建过程

介绍这是一个连载的系列「图解 Android 系列」,我将持续为大家提供尽可能通俗易懂的 Android 源码分析。所有引用的源码片段,我都会在第一行标明源文件完整路径。为了文章篇幅考虑源码中间可能有删减,删减部分会用省略号代替。本系列源码基于:Android Oreo(8.0)SystemServer 进程SystemServer 进程是由 zygote 进程 fork 出来的,进...

2019-05-29 20:21:29 864

原创 最通俗易懂的 Handler 源码解析

简介在 Android 中 UI 线程是不安全的,如果在子线程中尝试进行更新 UI 操作,程序就有可能会崩溃;当然如果在 UI 线程中做耗时的操作,系统就会弹出 ANR 弹窗提示该程序无响应,十分影响用户体验。Android 系统中提供了 Handler,这样我们就可以使用 Handler 在子线程中发送消息来更新 UI;也可以将耗时操作交给子线程处理,等子线程处理完后再使用 Handler ...

2019-05-22 16:30:04 679

原创 【生活常识】如何能安逸的活着?

经常看到朋友圈转发各种 xx 筹,点开的内容基本一致,得了 xx 病急需 xx 万元医疗费,希望大家能献献爱心等等。最开始看到这些我都会伸出援助之手,但后来发现越来越多。直到看到了一篇报道说,一位年入百万的老板发起了几十万的 xx 筹,本来医疗费只需要几万元最后还赚了几十万。看过这篇报道后再看到 xx 筹的转发都有一种莫名的抵触,渐渐的感觉这就是一种道德绑架,难道那些不捐助的人都没有爱心吗?...

2019-05-20 13:34:48 2063

原创 分享一些 Broadcast 使用技巧

简介Broadcast(广播) 是 Android 的四大组件之一,用于进程/线程间通信。广播最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的,它只负责「说」而不管你「听不听」。广播可以来之系统,例如,Android 系统在发生各种系统事件时发送广播(系统启动或者设备开始充电时)。也可以来自于其他应用程序,例如,应用程序也可以发送自定义广播,来通知其他应用程序...

2019-05-08 20:33:14 1086 1

原创 图解 Android 系列(二)深入理解 init 与 zygote 进程

介绍这是一个连载的系列「图解 Android 系列」,我将持续为大家提供尽可能通俗易懂的 Android 源码分析。所有引用的源码片段,我都会在第一行标明源文件完整路径。为了文章篇幅考虑源码中间可能有删减,删减部分会用省略号代替。本系列源码基于:Android Oreo(8.0)init 进程在上篇文章 揭秘 Android 系统启动过程 中介绍到,init 进程启动分为前后两部分,...

2019-04-18 17:50:41 1229 1

原创 如何正确的使用 Service?

简介Service(服务)是 Android 四大组件之一,它的主要作用是执行后台操作,Activity 提供了 UI 界面来跟用户交互,而 Service 则没有 UI 界面,所有的操作都是在后台完成。Service 跟 Activity 一样也可以由其它应用程序启动,即使用户切换到了其它应用,Service 仍然保持在后台运行。此外,一个组件可以与 Service 进行绑定(bind)来...

2019-04-04 17:59:29 1199

原创 Fragment 相关知识点都在这里了

简介Fragment (简称碎片)是 Android 3.0(API 11)提出的。为了兼容低版本 support-v4 库中也开发了一套Fragment API 最低兼容到 Android 1.6 的版本。过去 support-v4 库是一个 jar 包,从 24.2.0 版本开始,将 support-v4 库模块化为多个 jar 包。包含 support-fragment、 support...

2019-04-03 13:47:07 695

原创 图解 Android 系列(一)揭秘 Android 系统启动过程

当我们按下手机开机按键后,手机就会启动了。然后会看到 Logo,开机动画,最后会进入到手机桌面(Launcher),手机也就启动完成了。我一直搞不明白,这个过程到底做了什么?为什么按一个按键,手机就启动了呢?随着对 Android 的了解越来越多,直到阅读了源码,才逐渐解答了我的疑惑。如果你也有相同疑惑,请继续往下看,我将从源码的角度分析下 Android 系统启动的整个流程。计算机是如何启...

2019-03-27 13:20:35 2245 3

原创 重新认识 Activity 解答你的全部疑惑

什么是 Activity?Activity 是 Android 的四大组件之一,是用户操作的可视化界面,它为用户提供了一个完成操作指令的窗口。当我们创建完 Activity 之后,需要调用 setContentView(view) 方法来完成界面的显示,以此来为用户提供交互的入口。在 Android App 中只要能看见的几乎都要依托于 Activity,所以 Activity 是在开发中使用...

2019-03-22 15:36:27 1011

原创 原来 ArrayList 内部原理这么简单

简介ArrayList 是一种变长的基于数组实现的集合类,ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,它会自动扩容至一个更大的数组。另外,由于 ArrayList 底层基于数组实现,所以其可以保证在 O(1) 复杂度下完成随机查找操作。其他方面,ArrayList 是非线程安全类,并发环境下,多个线程同时操作 ArrayList,会引...

2019-03-13 19:34:08 1532 2

原创 一篇文章看明白 HashMap 工作原理

HashMap 源码分析简介HashMap 是 Java 语言中常用的用于存放键值对数据类型的集合类。随着 JDK(Java Developmet Kit)版本的更新,JDK 1.8 对 HashMap 底层的实现进行了优化,底层实现也由之前的 数组 + 链表 改为 数组 + 链表 + 红黑树 。HashMap 的常用方法如下://创建一个 mapMap&amp;lt;String, String...

2019-01-14 10:46:51 2173 1

原创 一篇文章看明白 Android v1 & v2 签名机制

Android - v1 &amp;amp;amp; v2 签名机制一、什么是签名?要想知道签名是什么,先来看为什么需要签名 ?了解 HTTPS 通信的同学应该知道,在消息通信时,必须至少解决两个问题:一是确保消息来源的真实性,二是确保消息不会被第三方篡改。在安装 APK 时,同样需要确保 APK 来源的真实性,以及 APK 没有被第三方篡改。如何解决这两个问题呢?方法就是开发者对 APK 进行签名:在 A...

2018-12-06 11:24:35 25115 15

最新JAVA银联支付接口文档和示例

JAVA最新银联支付接口文档,里面包括示例。

2013-12-24

JavaMail需要的jar

JavaMail需要的jar,包含activation.jar和mail.jar

2013-04-25

空空如也

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

TA关注的人

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