自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 资源 (35)
  • 收藏
  • 关注

原创 再探DataBinding

其实说到DataBinding, 不管你使用MVP,MVVM,估计都有用到,数据和View的双向绑定是很爽的,相信很多小伙伴是用的很6,但是原理以及流程不太清楚。今天分享一起学习下DataBinding的相关流程。举个例子public class User extends BaseObservable { private String name; private String age; public User(String name, String age) {

2020-05-20 18:49:05 346

原创 Jetpack ——LiveData初识到源码解析(一)

上篇博客分享了下Lifecycle,使用的技术也就是:观察者模式+注解+反射。本篇博客继续学习Jetpack的LiveData,其实这个东西是一种可观察的数据存储类。LiveData自己可以作为观察者,观察到数据变化,并回调给开发者。 它是可以监听到Activity(Fragment)生命周期的变化,并且在Activity处于活跃状态下,才发送时间通知开发者处理业务逻辑。LiveData官网这个LiveData不是数据,是数据存储类。LiveData的使用示例:一个按钮,一个TextView

2020-05-15 21:02:52 367

原创 Jetpack —— Lifecycle源码解析

从本篇博客开始,慢慢的开始在项目中学习使用Jetpack,这东西出来时间挺长了,但是一直种种原因,没学习(说白了就是:懒)。 由于项目中使用的是MVVM,前段时间想重新学习下MVVM,然后就搜到了这个Jetpack,从JetPack的LiveData ——> Lifecycle,这个学习过程,渐渐的发现,Google推出这套开发组件是有道理的。 本篇博客写一下学习到的Lifecycle知识点。Lifecycle使用创建一个类实现LifecycleObserver接口public class B

2020-05-14 11:43:10 303

原创 Android源码设计模式——备忘录模式

本篇博客分享——备忘录模式。 它是一种行为模式,用于保存对象的当前状态,并且在之后的某个时间点,该对象可以恢复到之前的状态,也就是说:我后悔了,我想回到以前的状态。可以,这时候“备忘录模式”可以给你后悔的机会。备忘录模式的定义在不破坏对象封闭的前提下,捕获到对象的当前状态,并且在该对象之外保存这个状态,以便于以后该对象恢复到该状态。备忘录模式的使用场景需要保存对象在某一时刻的状态和部分状...

2020-01-09 22:05:10 469

原创 Android源码设计模式——观察者模式

本篇博客分享一下Android中常用的设计模式——观察者模式。从本篇博客开发,只要是分享的设计模式一类的,都尽量不再用术语,尽量直接用代码表示,简洁易懂。对于观察者模式,我们只要记住一个关键点:解耦!解耦!解耦!观察者示例在JDK中,内置了观察者的相关类:Observer.java 和 Observable.java;前者是:观察者需要继承的类;后者是:被观察者需要继承的类;示例:前段...

2020-01-06 17:15:54 197

原创 Android进阶从零学习自定义View——View树的绘制机制

上篇博客,讲述了一些基本的知识点,《Android进阶从零学习自定义View——概念基础》不熟悉的小伙伴,可以先看下上篇博客。对于工作3-5年的开发者而言,相信绝大部分被问到过这个问题:了解自定义View吗?这短短的一句话,你可能会说:了解啊,自定义View需要重写onMeasure,onLayout, onDraw三个方法。没了,没了,对,没下文了, 那这个问题十有八九是跪了,不用想。...

2019-12-26 19:38:50 289

原创 Android进阶从零学习自定义View——概念基础

其实关于自定义View,网上实在是太多太多了,但是呢,还是最终决定开一个专栏来讲述自定义View。这个专栏的目的有两个:1. 我自己对于自定义View的总结2. 讲述我自己在学习自定义View过程中走过的弯路,旨在希望各位同学少走弯路。好了,其实自定义View知识点真的是很多,很复杂,很难理解,因此,本专栏会通过很多篇博客循序渐进的学习自定义View的相关内容。这个专栏的大纲如下:1. 自...

2019-12-21 14:04:51 225

原创 Android源码设计模式——工厂模式

工厂模式也是为了构建一个新的对象,它是创建型模式的一种。Android源码设计模式——Build模式(应用:AlertDialog源码分析)上述是之前的Build模式,也是创建型模式一种,不懂的小伙伴可以回看下上篇博客。工厂模式的定义自我叙述:定义一个抽象产品类,然后继承该抽象类形成很多的子类,在子类相当于是个:成品的产品,也就是我们真正要构建的产品。在定义一个抽象类,该抽象类内部:创建子...

2019-12-09 18:10:53 265

原创 Android源码设计模式——原型模式

上篇博客学习了Build模式,本篇博客学习一下原型模式,其实说到原型模式,刚开始听的时候一脸懵逼,但是学习完了之后,真的是感觉简单。原型模式介绍原型模式是创建型模式的一种,其实就是想要以某一个对象为“模版”,“复制”出相同的对象,也就是“克隆”出一摸一样的对象。原型模式多用于需要构建复杂的对象时使用。因为此时“复制”一个对象比创建new一个对象效率更高。原型模式定义用原型对象的实例执行创建...

2019-12-07 14:44:53 218

原创 Android源码设计模式——Build模式(应用:AlertDialog源码分析)

前言上篇博客讲述了单例模式:Android源码设计模式——单例模式实际上在学习单例模式之前,我觉得单例模式就是这样写的(懒汉式),但具体分哪些种,以及为什么这样写,是迷糊的。如果有小伙伴也是跟我一样,请移步上篇博客。同理本篇博客记录一下构建者模式的学习,对于个人而言,之前学习过好几遍构建者模式,但都会有不同的体会,此次也不例外。首先对于构建者模式,很多第三方框架都有用到,比如:Glide。...

2019-12-05 17:37:03 239

原创 Android源码设计模式——单例模式

实际上关于设计模式

2019-11-21 17:11:43 313

原创 Android自定义View——手把手教你九宫格手势解锁

最近写了个九宫格手势解锁,先附上效果图吧? 上面是效果图,再附上代码?行。Github 戳我这篇博客讲述一下实现这个效果的思路。我觉得知道了这个思路,并且顺着这个思路走,每个人都可以自己写一个出来。但是写出来的代码健壮否,就看个人功底了。创建GestureView继承自View在这个代码里你只需要做两件事实现onDraw方法实现onTouchEvent方法记下来我们肢解一下...

2019-11-03 12:36:13 1044 1

原创 Android进阶9:手写Bufferknife(编译时注解)

说到Bufferknife,相信基本都用过。在Activity中使用:class ExampleActivity extends Activity { @BindView(R.id.title) TextView title; @BindView(R.id.subtitle) TextView subtitle; @BindView(R.id.footer) TextView fo...

2019-10-27 12:26:25 397

原创 Android 插件化开发——手写基于静态代理的插件化框架(启动Activity)

自学插件化有一段时间了,这篇博客算是对前几个月学习的“开花结果”。先给自己鼓个掌!其实这段时间是真累,白天工作,晚上九点下班,到家再学习插件化,早上早起学习插件化,真的是累的不行,但是还是比较充实的。好了,步入正题:基于静态代理的插件化前言说到插件化,我是被那个斗地主吸引了,不知道各位有没有玩过这个游戏,在游戏大厅中:想玩斗地主的话,就点击下载,然后想玩麻将的话,就点击下载麻将,下载加载完毕...

2019-10-19 14:05:30 646 1

原创 手写Android热修复

其实关于为什么会产生热修复,热修复怎么用,这些网上一大篇博客,本篇博客的内容是 :手写一个Android热修复Demo要手写Demo ,首先需要掌握 两点:反射和ClassLoader。关于ClassLoader,不了解的可以看下上篇博客 Android中的类加载器——ClassLoader。反射知识,可以看下这个博客:Android 插件化开发——基础底层知识(反射), 这里直接贴出我们De...

2019-09-28 14:45:44 766 1

原创 Android中的类加载器——ClassLoader

最近参加了个热修复训练营,其实说起这个训练营,这是偶尔看的广告点进去的。最近一直在学习插件化,其实在我看来热修复和插件化应用的技术挺像的 ,其中都用到的有Android的:类加载ClassLoader。说到类加载机制,其实老早我都想写一篇博客,梳理一下对于ClassLoader,但是总感觉对于ClassLoader理解的不深,深怕出错误导大家,所以一直一拖再拖。说道ClassLoader,首先...

2019-09-27 19:35:09 878

原创 Android 插件化开发——获取插件中的资源

之前做的项目是RN的项目,最近在将之前的项目用Android组件化重构一遍 + 白天还得工作。真的是忙的要命,再加上自己十一点之前肯定上床睡觉的“坏习惯”, 没办法只能在中秋节的今天来继续学习插件化。 祝各位小伙伴:中秋快乐!之前学习了宿主APP如何加载插件APK,本篇博客学习:宿主APP加载插件APK的资源。因为我们平时用Activity的居多,并且每个Activity都会调用各种资源,因...

2019-09-13 16:35:22 1222

原创 Android 插件化开发——宿主APP加载APK插件

本篇博客说一下我们的宿主APP怎样加载别的APK文件。首先需要说一些知识点,我们的Java文件要想在Android环境运行,需要将.java文件通过转为class文件,然后为了能在DVM上面运行,再转为dex文件。同理反过来,我们在代码中要操作的基本都是class文件,但是class文件怎么来呢? 从DexClassLoader加载获取。DexClassLoader和PathClassLoad...

2019-08-22 09:06:50 2376

原创 React Native热修复CodePush以及react-native-update

对于RN开发而言,最方便的就是热修复了,我们公司项目集成的热修复是:react-native-update,但是我们的用户主要针对尼日利亚用户,而国内的react-native-update补丁包是放在国内七牛上的,因此访问巨慢,加上尼日利亚那边基本都是3G,综合考虑该换微软的:CodePush.对于CodePush而言,东西是真的多,覆盖问题真的全,因此我们需要摘出我们需要的东西——根据需求找...

2019-08-18 12:05:26 1495

原创 Android 插件化开发——启动没有在ActivityManifest中声明的Activity(二)

要解决这个问题,首先回顾一下启动一个新的Activity的流程:要启动ActivityB,将要启动的ActivityB信息告诉AMS;AMS收到信息后,记录下ActivityB的相关信息,同时检查Manifest中是否已经注册了ActivityB,如果一切正常,则回传消息给ActivityThread:我接收到了!你可以paused了!ActivityA进入Paused状态,再告诉AMS:...

2019-07-27 12:07:48 865

原创 Android 插件化开发——对startActivity方法进行hook(一)

本篇博客主要讲述一下对startActivity进行hook,对于Android开发来说,跳转一个新的Activity页面,最常见的无非两种了,方法一:Intent intent = new Intent(MainActivity.this, NewActivity.class);startActivity(intent);方法二:Intent intent = new Intent(...

2019-07-20 13:58:33 653 1

原创 Android 插件化开发——基础底层知识(代理模式)

今天周六,接着自我学习插件化,今天学习代理模式,温习一下上一篇博客Android 插件化开发——基础底层知识(反射)关于代理模式,是众多设计模式中的一种,我想说在学习该知识点之前,也是云里雾里,只知道有这个东西,但是具体写代码就GG了,其实Android系统源码里就很多代理模式。为什么需要代理模式?代理类在客户端和目标端起到中介作用,这样可以保护目标端,同时也能够给客户端提供相应的服...

2019-06-22 12:23:21 485

原创 Android 插件化开发——基础底层知识(反射)

继续我们的底层知识学习,为后面的插件化开发作准备。上一篇:Android 插件化开发——基础底层知识(Service)本篇博客学习反射,其实说到反射,正常开发用不到,所以之前也不太会,不,是不会。如果不是为了学习了解插件化,真的还是不会主动去学习反射。反射关于反射,我们需要掌握以下几点:获得一个类获得类对象获得静态函数获得非静态函数获得类非静态成员变量并修改获得类的静态...

2019-06-20 22:32:23 362

原创 BUG : Manifest merger failed with multiple errors, see logs

这个问题出现的前提是:RN项目,前天运行还好好的,昨天运行突然就over了,实在头疼,网上搜了一把,很多说是:manifest资源冲突,但是细看自己的Manifest,确定没有冲突的,就考虑到了,是不是自己RN项目依赖有问题? 又开始了爬坑之路。BUG描述:Caused by: java.lang.RuntimeException: Manifest merger failed with m...

2019-06-20 10:49:26 2950

原创 Android 插件化开发——基础底层知识(Service)

上一篇我们讲了Context和Activity的相关知识,Android 插件化开发——基础底层知识(Context家族史,Activity启动流程)本篇我们讲述Service的工作流程以及BroadcastReceiver工作流程关于Service的创建启动流程,其实和Activity的创建启动流程是相似的。都是和AMS交互,通信介质是:BinderService工作流程关于S...

2019-06-17 22:15:56 343

原创 Android 插件化开发——基础底层知识(Context家族史,Activity启动流程)

通过上一篇Binder以及AIDL的学习,博客最后写了实际上Activity与底层通信模式可以看成是AIDL。不了解Binder以及AIDL的,移步:Android 插件化开发——基础底层知识(Binder,AIDL)这篇博客接着为插件化开发作准备,讲述一下Context家族史以及Activity启动流程Context家族史关于Context,相信并不陌生,但是估计很多初学者都不...

2019-06-16 11:13:44 462

原创 Android 插件化开发——基础底层知识(Binder,AIDL)

最近在学习Android插件化开发,其实最早最插件化开发的理解就是:比组件化开发高一级。抱着提高能力的态度,买了本插件化开发书《Android插件化开发指南》,接下来的博客都将是Android插件化开发的相关知识。通过这几天的学习和查找资料,慢慢的对插件化发生了改变,其实最早插件化做的热修复比较多,也就是线上修复BUG一类的,后来出现了RN以及热修复框架,特别是RN的跨平台。好像AndroidP...

2019-06-14 22:02:00 639

原创 使用Retrofit框架,怎样通过返回的头部信息header解析respond?

由于公司最近的这个项目要求保密性比较高,所以就要求我们在前后端传输上面做做文章了。项目使用的是Retrofit框架,现在需要通过response中header的key作为密钥进行解密,常规的做法肯定是:在onResponse回调方法中,取出header,再解密。这种方法可以,但是不美观,耦合度太高。我们知道Retrofit提供了Intercept和Converter.Factory接口, In...

2019-05-27 11:03:54 3119 1

原创 Android项目环境搭建问题记录

1: Unknown host ‘d29vzk4ow07wi7.cloudfront.net’. You may need to adjust the proxy settings in Gradle.将项目根build.gradle目录下的两个jcenter() 替换为:maven { url 'http://maven.aliyun.com/nexus/content/groups/pub...

2019-05-22 15:23:24 387

原创 React Native 开发之旅(知识点1——更改Ant Design Mobile)

嗯,二月过年+学习RN,忙的一笔,所以…二月拖更了。过完年换坑之后,新公司开了一个新项目,使用RN开发,对于不会JS的我来说,一脸懵逼,不过还好,经过一个月的学习磨合,1个月测试版本APP昨天打出来了,叉会儿腰,真心累。通过这一个月开发RN,RN给我的直接感觉就是:快,快,快,真的快! 前几天我试着使用原生和RN开发同一个模块。使用原生开发时,我创建了十几个文件(MVVM模式);但是使用RN开发...

2019-03-31 17:08:33 791 1

原创 Android中级工程师面试总结

年关将近,很多小朋友都在考虑换个坑蹲蹲,我也不例外,实际上我定义的初中高级开发对应如下:初级工程师 1-3年中级工程师 3-5年高级工程师 5年以上初级工程师:前两年基本都是——多处理一些场景,也就是扩展广度,在两年到三年的这一年是很关键的,需要扩展广度的同时,还要扩展深度,不过这个深度具体是大到什么程度,就根据个人情况了。举个例子:我用了一个框架,这个框架怎么用?哪种场景使用?为...

2019-01-25 16:18:40 1821

原创 Android进阶8:SharedPreferences原理分析

关于SharePreferences(以下简称SP)的使用,相信从刚开发Android都开始使用了,但是对于SP的原理以及SP的缺点可能很多人没有系统的认知。首先说一下SP的结论:容易因此ANR:SP不适合存储数据量很大的信息;同时JSON以及HTML最好也不用SP存储,因为特殊字符转义是非常消耗性能的。全量写入:在apply或者commit的时候,会先添加信息到内存中,在开启子线程,将内...

2019-01-13 17:45:10 687

原创 Android进阶7:APK瘦身(减少APK体积)

对于Android开发来说,关于减少APK体积的重要性,就不再多说了,直接进入正题吧。首先对于APK瘦身,分为两种:压缩资源,压缩代码1:移除无用资源和无用代码移除无用资源分为两种:手动移除和自动移除手动移除:Android studio提供了相应的检测工具 Link : Analyze > Inspect Code在控制台的Inspection Results中显示出需要更改...

2018-12-23 13:40:30 1305

原创 Android进阶7:内存优化——LeakCanary原理分析

好的项目离不开健壮的代码,对于想要写出健壮的代码,解决内存泄漏是必须的。对于LeakCanary,对于大多人是不陌生的,也就是检测内存泄漏的工具。可能在代码中我们会这样引入LeakCanary: //检查leakCanary和APP是否在同一个进程,如果是同一个进程就返回,不在同一个进程,就注册。 //因为不再同一个进程,不会对APP进程造成消极影响(如:APP进...

2018-12-22 13:33:21 1556 2

原创 Android进阶6:View的事件分发机制源码

前言关于事件分发机制,这个东西对于开发者,很重要,例如:解决滑动冲突;对于面试者,也很重要,比如:请描述一下View的事件分发机制~。说句实话,这个源码是看了很长时间,一直不敢写这篇文章,生怕误人子弟啊,说实话,刚开始刚觉很难,但是硬着头皮再看,也就那么回事了。。。View分发机制的相关方法ViewdispatchTouchEvent(ev) : 专门处理事件onTouchEvent(...

2018-12-10 20:39:04 578 2

原创 NodeJs后端实现文件上传和下载

最近公司需要一些做基础服务以及一个APP的后台数据分析管理系统,为了成为全栈工程师,自告奋勇的开启了Nodejs的开发后端。现在有一个基础服务:file的上传和下载,关于为什么是基础服务?因为file的上传和下载与业务逻辑无关,不管什么业务逻辑都可能调用该接口,故称之为:基础服务。 还有:短信网关也属于基础服务。声明:我的开发环境是:Express闲话少叙,开启正文。平时后端的文件上传思路...

2018-12-07 17:58:08 8992

原创 Android 进阶5:Glide4.0源码分析

这篇博客其实准备了很久,从Glide的各种使用到Glide的源码分析,Glide的源码很复杂,个人感觉,比LeakCanary,Eventbus等框架源码复杂很多,网上说别Picasso源码复杂,以后再看Picasso的源码吧。本片博客打算分为三个部分Glide的使用以及原理Glide的源码Glide的生命周期**1: Glide的使用**其实关于Glide 的使用,网上有很多...

2018-10-10 21:52:59 1403 1

原创 Android 进阶4:EventBus3.0源码分析

前几篇文章分析了Activity的源码,后来看了看Window以及ViewRoot的相关源码,这些只是还没梳理,真的是视觉疲劳,来一个EventBus源码分析压压惊~。其实关于EventBus的源码分析,网上也有很多,但是终究是别人的,以前也看过很多遍,但是决定是自己写下来比较好,座右铭:看一遍,不如自己写一遍。关于EventBus的小总结我们先看下,带着知识点去看源码,然后分析为什么要这么写...

2018-09-20 20:43:55 1241

原创 Android进阶3:Activity源码分析(3) —— setContentView分析(8.0)

在看setContentView源码之前,就知道,PhoneWindow, DecorView这些东西,不知道之间的联系,上周末加班看了下源码,慷慨颇多,“源码面前,无所遁形。”Hierarchy View 的使用在看是之前我们先看下Android studio的Hierarchy View, 这是AS自带的View调试工具,怎样使用呢? 打开步骤:Tools —— Android ...

2018-09-17 16:46:48 410

原创 Android进阶3:Activity源码分析(2) —— Activity启动和销毁流程(8.0)

上篇文章讲述了app从启动创建Activity调用onCreate,onStart, onResume方法,这篇文章讲述一下Activity启动的另一个切入点:startActivity方法,启动Activity。Android进阶3:Activity源码分析(1) —— Activity启动流程(8.0)通过上一篇文章,我们总结一下: 1:ActivityThread是通过Instru...

2018-09-14 17:07:32 3118

Python安装包

Python开发安装配置安装包

2017-07-24

MvvmProject

android 学习mvvm的demo

2017-07-20

BannerProject

android banner 使用参考

2017-07-18

testerrorproject

android 数据加载状态封装

2017-07-17

TestCamery

android 拍照或者从系统相册获取照片,裁剪图片,再讲图片变为圆形图片

2017-07-17

封装GreenDao

封装greendao 异步处理,操作数据库的结果回调给Ui

2017-07-13

android 自定义view实现九宫格手势解锁

android 自定义view实现九宫格手势解锁

2017-06-29

PickerView倒计时

自定义pickerview实现滚轮效果 附带倒计时的实现

2017-06-28

自定义view柱形图表

自定义view实现通用的柱形图表

2017-06-21

通用柱形图自定义view

自定义view实现通用的柱形图表

2017-06-21

项目WIFI开发

wifi开发

2017-06-20

BeiSaiErProject

使用二阶贝塞尔曲线实现“波浪”效果

2017-05-19

FlowViewGroup

android 自定义ViewGroup 实现流式布局

2017-05-18

CircleViewProject

自定义view实现发散弹出效果

2017-05-09

pinyinProject

仿通讯录

2017-05-08

android_musicview

android自定义音乐柱形图

2017-05-05

surfaceview实现抽奖转盘

主Acitivty点击最后一个按钮就是抽奖转盘

2017-04-28

HourseProject

android 自定义view实现跑马灯效果

2015-04-24

MVVM RecyclerView使用

MVVM框架,RecyclerView的使用 MVVM框架,RecyclerView的使用MVVM框架,RecyclerView的使用

2018-07-02

MVVM基本使用

android MVVM的使用 android MVVM的使用android MVVM的使用android MVVM的使用

2018-07-01

RecyclerView ItemDecoration的使用

ReylerView ItemDecoration的使用,ReylerView ItemDecoration的使用,ReylerView ItemDecoration的使用,

2018-06-29

Reforfit的使用

Reforfit的简单封装和使用,log打印以及GSON解析。

2018-06-27

Android沉浸式状态栏

Android 沉浸式状态 分两种: TOOLBAR_STATUS_TYPE = 1; //tollbar类型 IMAGE_STATUS_TYPE = 2; //图片类型

2018-06-27

Reforfit2.0

Reforfit简单封装,是基于Reforfit2.0,拦截添加头部信息

2018-05-23

沉浸式状态栏

沉浸式状态栏,分两种情况, 1:包含toolbar 2:不包含toolbar

2018-05-23

gradle-4.3

android studio gradle-4.3,android studio gradle-4.3,

2017-11-22

gradle-4.1

android sutdio gradle4.1rar,android sutdio gradle4.1rar,android sutdio gradle4.1rar,

2017-11-22

AidlSecondProject

AidlSecondProject是Aidl的简单实用教程,该Demo传递的数据类型是非默认数据类型,里面包含一个客户端和一个服务端。

2017-09-18

aidlProject

该Demo是AIDL的使用教程,传递的数据类型是默认数据类型,里面包含一个客户端和一个服务端。。。。。。。。

2017-09-18

ApkUpdateProject

该ApkUpdateProject工程实现了android应用的更新,可以下载学习,项目中的网络访问代码可以改成自己项目中的框架。

2017-09-12

ToolbarUtils

ToolBar的简单使用,在项目中,我们一般都是使用封装之后的Toolbar, 对于TooBar的封装详见Demo中的ToolBarUtils类,在该类中我们通过接口回调给UI层

2017-09-05

LmqJPushProject

极光推送(自定义消息)

2017-08-11

zxing集成包

zxing集成所需包

2017-07-31

zxingproject

android Zxing集成

2017-07-31

AnimationProject

android动画demo

2017-07-28

空空如也

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

TA关注的人

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