自定义博客皮肤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 开发者,专注移动开发领域,热爱分享,热爱开源。

  • 博客(233)
  • 资源 (4)
  • 论坛 (1)
  • 收藏
  • 关注

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

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

2018-03-08 13:49:11 26983 13

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

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

2018-03-01 10:24:31 22510 6

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

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

2018-02-12 17:40:41 17824 10

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

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

2018-01-26 17:32:44 11900 9

原创 一篇文章看明白 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 18476 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 23005 3

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

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

2017-04-11 18:12:53 61723 52

原创 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 2019 6

原创 Hook 技术初探

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

2020-08-31 09:00:04 989

原创 不得不学之代理模式

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

2020-05-28 09:11:35 544

原创 聊聊反射

反射 (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 248

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

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

2020-03-04 15:48:39 1721

原创 性能优化系列(六)启动性能优化

文章首发「Android波斯湾」公众号,更新地址:https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode提高程序的启动速度意义重大,很显然,启动时间越短,用户才越有耐心等待打开这个 App 进行使用,反之启动时间越长,用户则越有可能来不及等到 App 打开就已经切换到其他 App 了。程序启动过程中的那些复杂错误的操作很...

2020-03-03 09:40:12 587

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

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

2020-03-02 09:45:54 1674

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

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

2020-02-28 11:31:00 453

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

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

2019-12-28 10:26:33 567

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

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

2019-12-05 22:39:35 905

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

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

2019-11-19 08:05:17 1472

原创 字节码指令

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

2019-10-20 11:07:18 228

原创 字节码文件结构

我们都知道 .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 624 2

原创 TreeMap 源码分析(下)

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

2019-08-17 15:43:25 223

原创 TreeMap 源码分析(上)

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

2019-08-07 08:39:09 368

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

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

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

原创 聊聊 Activity 栈的亲和关系

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

2019-07-11 08:51:22 819

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

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

2019-07-04 10:21:38 330

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

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

2019-07-02 08:40:28 967

原创 LinkedList 源码分析

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

2019-06-25 14:04:31 848

原创 屏幕适配最佳实践

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

2019-06-11 15:10:43 406

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

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

2019-05-29 20:21:29 404

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

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

2019-05-22 16:30:04 286

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

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

2019-05-20 13:34:48 1488

原创 分享一些 Broadcast 使用技巧

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

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

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

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

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

原创 如何正确的使用 Service?

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

2019-04-04 17:59:29 562

原创 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 309

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

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

2019-03-27 13:20:35 1009 1

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

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

2019-03-22 15:36:27 675

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

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

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

原创 Android 年薪百万的进阶攻略 —— 资深(专家)工程师学习路线

思维导图系统启动过程这一部分是 Android 系统从按下电源键开始,然后到展示开机界面,再到展示桌面之前的一个过程。了解下面相关进程的工作流程,会对 Android 系统有一个整体的概念,是一个从 0 到 1 的过程,对深入研究 Android 系统内部机制有很大帮助。init 进程了解 init 进程创建与启动的流程。Zygote 进程了解 Zygote 进程创建的流程,...

2019-03-05 13:47:58 2495 1

原创 Android 高级进阶攻略,轻松拿 Offer —— 高级工程师学习路线

思维导图相关原理常见 IPC 方式Binder 机制AIDL 的使用Handler 机制ThreadLocal 原理AsyncTask 原理ListView 工作原理阅读源码熟悉常见优化RecyclerView 工作原理阅读源码自定义 LayoutManagerAnimation 工作原理Activity 难点setResult() 和 fini...

2019-02-26 14:26:03 2926 7

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

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

2013-12-24

CNTV播放器

CNTV播放器,是个知名的播放器,其功能强大 很好使的播放器

2013-06-25

JavaMail需要的jar

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

2013-04-25

幽香2 最终版

CWUB是一款最新的QQ去广告显IP插件,支持最新的QQ2011。解压本压缩包到任意位置,运行cwub.exe即可,程序会自动寻找QQ安装位置并且进行引导。如果你想在运行QQ的时候自动加载CWUB,那么拷贝以下文件到Bin目录下:   *cwub.dll        主要功能模块   *cwub.ini        配置文件   *msimg32.dll       我已经写好的引导模块,只能使用我提供的这个 CWUB主要功能:   1、本地会员。可以免费使用表情涂鸦、炫彩字体,网络功能一概不能使用!   2、插件过滤。我挑选了一些最基本的插件保留,当然你可以自己再改进。(不支持删除插件)   3、内存整理、摄像头开关。每60秒整理一次内存。摄像头只有开关,没有不干涉选项。   4、协助载入。本程序不保证同时兼容其它辅助软件。而且多半也不兼容。   5、显示客户端。在线好友能直接获得,隐身好友需要聊天才能获得。   6、显示对方IP。需要发送图片、传输文件或视频聊天等才能获取。   7、还有许多辅助小功能,都可以在聊天窗左下角点击右键用菜单进行设置。

2012-09-12

jeanboydev的留言板

发表于 2020-01-02 最后回复 2020-02-09

空空如也

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

TA关注的人 TA的粉丝

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