自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 一个枚举搞定Activity之间的数据传递

正常我们从一个activity跳入另一个界面时候,如果需要携带参数。则代码如下 public static void startActivity(Activity activity,UserChange userChange){ Intent intent = new Intent(activity,UserChangeActivity.class); inten...

2019-10-06 10:06:43 89

原创 synchronized简版Looper

我们知道Looper的工作机制就是不断的从MessageQueue里面获取消息,没有消息的时候则等待,直到有消息到来,看Looper的源码发现阻塞等待和通知用的是linux的epoll,它是linux内核下高效的的异步唤醒机制。既然是等待和唤醒,那是不是只用java就可以处理了。于是利用synchronized实现一个简版的LooperMessage,里面只是简单的一个数据,并且简单用strin...

2019-10-06 10:05:51 45

原创 Glide源码解读(二)

前面文章分析到buildRequest方法,现在继续看buildRequest方法,调用了buildRequestRecursive方法 private Request buildRequest(Target<TranscodeType> target) { if (priority == null) { priority = Priority.NORMA...

2019-10-06 10:04:31 30

原创 Glide源码解读(一)

#Glide 流程 3.5.2作为一个优秀的通用图片加载库。有着几乎所有的优点,使用简单,加载各种格式图片资源,预加载图片资源,根据控件大小合理缩放资源,支持图像变换操作等等,既然这么优秀的框架,那就值得我们好好深入理解它的设计和实现原理。现在我们跟随源码一探究竟with方法有很多重载方法1 使用,一行代码搞定Glide.with(context).load(url).error(erro...

2019-10-06 10:04:01 52

原创 图表之环形图

最近项目新增一个环形图表数据查看的。效果图如下在网上找了相关画环形的,都不符合需求,找到一个类似的代码RoundRateView,基本画出了外面圆环,但是有瑕疵,然后再修改首先根据传入的4个数值,计算出所占比例和相应的角度。然后画弧形 angleList是各个数据对应的角度。当然白色区域也算,所以加起来这个集合的大小就是8。 float angle=0; for (int i =...

2018-12-25 15:47:44 1256

原创 图表之折线图

最近项目新增一个图表数据查看的。效果图如下各个折线点x,y点坐标很好计算。不好画的是如何让这个折线不穿过这个空心圆如果折线穿过空心圆,则变成下面这个样子折线点画圆没错,但是直接连接折线点肯定和圆有相交,但是这又是个空心圆,如果是实心圆,则先画线,再画圆就可以直接覆盖在上面。but 。。产品就是这么虐心,搞个空心圆。。so。实现起来难度就大那么一丢丢了。既然不能直接连接圆中心,那就是需...

2018-12-25 11:09:12 278

原创 深入Java虚拟机-读书笔记二 垃圾收集器

深入Java虚拟机-读书笔记二垃圾收集器当我们讨论垃圾收集的时候,也就是讨论三个问题1. 哪些内存需要回收?堆?方法区?方法区里面的常量池?还是其他? 2. 什么时候回收?内存不够的时候回收还是定时回收? 3. 如何回收?回收的依据算法是什么?哪些内存需要回收?前面笔记记录Java内存运行时区域时,其中程序计数器,虚拟机栈,本地方法栈3个区域随着线程而生命周期。因此这几个...

2018-08-21 11:08:33 74

原创 深入Java虚拟机-读书笔记一Java运行时数据区域和对象创建和访问

深入Java虚拟机-读书笔记一Java运行时数据区域和对象创建和访问Java运行时数据区域Java虚拟机在执行程序时把它所管理的内存划分为若干不同的数据区域。这些区域都有各自的用户,以及创建和销毁的时间。如下图 程序计数器一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,在任何一个确...

2018-08-17 17:38:56 88

原创 Gradle基础

配置Gradle环境前提:配置好Java环境把gradle 对象的bin目录配置到系统环境变量里面出现如下图,则表示环境已经配置好了Gradle版 hello world创建一个build.gradle文件添加gradle版的hello world脚本代码task hello{ doLast{ println 'hello world' ...

2018-08-17 17:37:35 162

原创 EventBus 源码解读

EventBus 基础 发布者通过EventBus发布事件,订阅者通过EventBus订阅事件。当发布者发布事件时,订阅该事件的订阅者的事件处理方法将被调用。这里的事件,指的是一个对象类型。只有对象类型相同时,订阅方法才会被处理,还支持订阅方法在不同的线程中被调用首先是注册方法,获取对象的Class对象,然后去SubscriberMethodFinder类中查找,public void ...

2018-07-01 19:03:42 80

原创 RxJava 源码 解读

RxJava 源码解读 一直以来在网上看到关于RxJava的使用博客都称赞RxJava使用起来非常简洁,即使业务逻辑非常复杂,它依然能够保持简洁。于是在个人项目也添加了RxJava和RxAndroid.秉着知其然知其所以然的态度,跟着调用方法一探其源码, 首选是调用方法。这个方法是获取手机里面的所有音乐文件信息,并且返回给回调者,并且这里的ObservableOnSubscribe...

2018-06-30 17:34:09 166

原创 CSDN-markdown编辑器语法

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...

2018-06-04 15:20:04 77

原创 采坑记之greendao缓存

 采坑记之greendao缓存项目里面ORM框架用的greendao.测试中出现一个问题,在一个界面获取数据库的一个对象,然后更改对象的属性值,没有点击保存按钮。再进入这个界面时,从数据库同样获取的这个对象居然改变了。之前有看到网上说greendao有缓存,所以获取数据比较快,我猜想这里碰到的应该也是这个问题。 我模拟获取数据对象的示例代码,首先拿到对象,然后设置一个属性后,再去数据库获取对象打印...

2018-06-04 14:46:57 1131

原创 BroadcastReceiver流程解析

 ContextImpl的registerReceiver方法首先查看注册方法@Overridepublic Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,        int flags) {    return registerReceiver(receiver, filter, null, n...

2018-05-25 17:20:51 182

原创 startService源码解读

之前分析过startActivity方法的源码,知道了startActivity的调用流程,大致的流程就是app通过Binder调用AMS的方法,然后AMS也通过Binder调用app的方法,app再回调我们的Activity的生命周期方法。AMS并不是直接保存我们的Activity的引用,而是通过每个Activity对应一个ActivityInfo信息在AMS保存。因为Activity是andr...

2018-05-25 09:33:17 160

原创 invalidate方法源码追踪

  首先调用public void invalidate() {        invalidate(true); }调用invalidete 带参数的方法 void invalidate(boolean invalidateCache) {        invalidateInternal(0, 0, mRight - mLeft, mBottom - mTop, invalidateCach...

2018-05-05 23:29:07 257

原创 插件化原理之hook系统函数

 插件化原理之hook系统函数插件化主要问题之一是如startActivity一个未在注册表里面注册的acitivity。我们都知道开启一个activity是涉及到app进程和系统服务进程的交互过程,其中验证要打开的acitivity是否在清单文件中也是在系统服务进程进行的,那么”如何”欺骗系统服务进程?l 方案一是设置一个代理ProxyActivity,这个ProxyActivity在清单文件中...

2018-04-30 19:30:14 402

原创 从startActivity谈起

Activity.java@Overridepublic void startActivity(Intent intent) {    this.startActivity(intent, null);}调用了带Bundler参数的重载方法@Overridepublic void startActivity(Intent intent, @Nullable Bundle options) {   ...

2018-04-28 17:29:12 82

原创 setContentView源码解读

setContentView方法是我们Activity里面必须要用的方法,那么当我们调用这个方法的时候系统到底做了什么呢?现在来一探究竟首先查看Activity.java public void setContentView(@LayoutRes int layoutResID) {        getWindow().setContentView(layoutResID);        in...

2018-04-15 14:28:31 126

原创 Android热修复之dex修复原理

Android热修复之dex修复原理首先有一个出Bug的类  然后在点击按钮事件里面添加调用bug类的方法  模拟bug出现的场景。  再修复这个出bug类的方法 然后生成dex文件 dx命令 dx --dex --output=a.dex com\example\hellojnicallback\BugTest.class要把BugTest的包路径都复制过来,然后执行命令,执行成功后可以看到a....

2018-04-09 16:40:00 362

原创 热修复之AndFix探秘

热修复之AndFix探秘近几年热修复技术可谓百花齐放,阿里的底层结构替换即时生效技术AndFix,后来又出来看起来很叼的Sophix,同时支持即时生效和冷启动修复。微信的Tinker和饿了么的Amigo。看了好几遍AndFix原理后,特写个Demo测试完成,写个博客记录下。来张官网的原理图 首先模拟一个类中出现了BUG方法。 然后在布局文件点击事件中调用这个方法,程序不出意外的奔溃退出了。 然后我...

2018-03-29 17:36:41 103

原创 内存泄露分析之as monitors、MAT、leakcanary 使用

内存泄露分析之as monitors、MAT、leakcanary 使用1 android studio monitors这是android studio自带的工具在当前进程下,点击如下图标,触发gc操作 Gc后再点击旁边的按钮,收集java堆内存的信息,点击几分钟之后会生成内存信息文件生成文件之后android studio会自动跳转到当前界面,如下图  这里显示了内存中所有的类和对象信息点击如...

2018-03-27 16:08:34 220

原创 View触摸事件源码分析

View的dispatchTouchEvent方法的省略版源码public boolean dispatchTouchEvent(MotionEvent event) {    //dispatchTouchEvent的返回值    boolean result = false;    //...balabala省略前面部分代码    if (onFilterTouchEventForSecuri...

2018-03-19 15:11:40 93

原创 JNI-C指针语法

JNI-C指针语法最近看阿里的热修复代码时,发现里面基本都是在c层处理,想着以前也考过c2证书,c语言基础还是比较了解,没想到看到一大堆的*&amp;符号的时候,只记得*符号是用于指针,至于指针怎么用的,现已差不多记不得了。想到如果想精通JNI,则必须先对c指针精通,于是再来温故一下C语法里面的指针为学习c语法先安装了一个eclipse c++版本,然后再安装minGW,配置其环境。就可以很轻松的...

2018-03-10 15:15:18 757

原创 ARouter源码解读

ARouter源码解读以前看优秀的开源项目,看到了页面路由框架ARouter,心想页面路由是个啥东东,于是乎网上搜索查看,是阿里出品开源的,主要是关于页面跳转的解耦框架。一直想看看具体是怎么实现的,今有时间便来一探究竟。传统的页面跳转就是调用系统的startActivity,里面的参数Intent携带了要跳转的信息,可以传入要跳转的activity信息或者action。如果是action则要在清单...

2018-02-14 18:27:20 256

原创 设计模式之代理模式

设计模式之代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.举个栗子,比如你要调用别人的代码,想计算调用别人方法耗时多久,你不可能说要别人在里面添加统计耗时,你也不可能说在每个调用别人方法的时候在调用方法前和后计算耗时,这个时候你只要写个代理类,调用它的方法

2017-10-04 15:00:44 199

原创 Picasso源码分析

首先从调用第一行代码看起// Trigger the download of the URL asynchronously into the image view.Picasso.with().load(url).placeholder(R.drawable.placeholder).error(R.drawable.error).resizeDimen(R.dimen

2017-08-19 17:40:27 248

原创 Android ble蓝牙开发介绍以及遇到的坑

Android ble蓝牙开发BLE介绍安卓4.3(API 18)为BLE的核心功能提供平台支持和API,App可以利用它来发现设备、查询服务和读写特性。相比传统的蓝牙,BLE更显著的特点是低功耗。这一优点使AndroidApp可以与具有低功耗要求的BLE设备通信,如近距离传感器、心脏速率监视器、健身设备等。BLE开发BLE权限添加为了在app中使用蓝牙功能,必须声明蓝牙权限B

2017-08-19 17:18:22 4759 1

原创 LeakCanary源码分析

从sample项目中的入口开始查看:public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)) { // Th

2017-08-13 22:44:18 221

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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