自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (46)
  • 收藏
  • 关注

原创 简单工厂模式

场景: 创建对象简单工厂: 提供创建对象的功能,不需要关心具体的实现好处: 降低客户端与模块之间的耦合度(最少知识原则)用例:需求:导出数据文件:数据库文件、文本文件工厂方法:把对象的实现延迟到子类完成ExportFileApi.javapackage simpleFactory;public interface ExportFileApi { public void export();}ExportDBFile.javapackage simpleFactory;pub

2021-03-29 21:17:18 365

原创 Gradle相关配置(一):Gradle配置分析

1、语言和作用Gradle是一种自动化构建语音,是一种DSL,目前是Android的默认构建工具,是一个编译框架。APK构建流程:2、Gradle特性3、Gradle的重要概念①Wrapper:指的是gradle-wapper.properties文件中的一些配置项,通过gradle-wrapper.jar包执行这些属性,比如distributionUrl指本地是否存在gradle插件,如果不存在就去网上进行下载。②Closure:闭包,可以理解为打包过程中一系列的执行命令。③Proj

2021-03-16 17:13:02 476

原创 Gradle相关配置(六):如何提高编译效率

1、gradle下载慢?可能原因: gradle版本都在用户目录下(C:\Users\XX\.gradle\wrapper\dists\),如果某个第三方的插件或某个第三方aar包或自己的某个模块,在这没有它就会去下载,不同版本都会进行下载一个,这就将导致编译速度非常慢。解决方法: 不要去下载带"-all"的所有gradle,如果下载了它会将当前版本所有文件都去遍历一遍,只需下载"-bin"文件的gradle即可。可以在gradle-wrapper.properties文件中进行配置distribut

2021-03-16 16:56:17 196

原创 Gradle相关配置(五):代码混淆与反混淆

如果在编译过程中不需要混淆,则将app目录下的build.gradle文件中的minifyEnabled 设置为false.设置为true,则编译过程中就会进行混淆。在app目录下的proguard-rules.pro文件中配置相关的混淆策略,比如在编译过程中配置不需要混淆的一些策略。# 针对于native方法不混淆-keepclasseswithmembernames class * { native <methods>;}# v4包不要混淆-keep class an

2021-03-16 16:08:26 1360 2

原创 Gradle相关配置(四):编写脚本去控制Gradle打包过程中是否需要加入某个library包

场景:比如给A公司的产品需要加入某个library的包(或module),给B公司的产品不需要加入某个library的包。实现流程:新建一个module,选择"Android library"类型。打开项目目录下的settings.gradle文件,并进行配置def buildType = 1; //1表示只打某一个包,2表示都打进去if(buildType == 1) { include ':app'} else if(buildType==2){ include .

2021-03-16 15:33:10 157

原创 Gradle相关配置(三):针对生产环境(prd)和调试环境(debug)有不同的服务器,如何进行配置?

针对生产环境(prd)和调试环境(debug)有不同的服务器,如何进行配置?配置流程如下:在与app目录下build.gradle同一级目录下新建一个config.gradle文件,该文件内容为:ext{ server="prd" //环境 dataSource="0" //假如0代表360,1代表应用宝}可以对上面的配置信息进行更改,比如将server="debug"设置为debug环境。在app目录下的build.gradle文件中添加如下代码apply fro

2021-03-16 14:59:54 519

原创 Gradle相关配置(二):生成签名包的流程

  本流程是基于创建一个新的项目的基础上进行完成,保证编译没有问题(初始创建一个项目就可以)。流程如下:1. 点击“Build”–>”Generate Signed Budle or APK”选项,点击选项框中的”APK”选项,点击“Next”;2. 在“Key store path”中的选中“Create new…”,进入“New Key Store”选项框中,进行相关的配置。  上图中红色框框内的部分都是需要填写的内容,其中password在后期打包过程中需要用到。  点击.

2021-03-16 13:39:55 397

原创 Android进程保活拉活

参考:腾讯视频相关视频公开课目录一、进程的一些基本常识二、如何保活三、如何拉活四、总结一、进程的一些基本常识Low Memory Killer系统出于体验和性能上的考虑,app在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来。打开的应用越多,后台缓存的进程也越多。在系统内存不足的情况下,系统开始依据自身的一套进程回收机制来判断要kill掉哪些进程,以腾出内存来供给需要的app, 这套杀进程回收内存的机制就叫 Low Memory Killer。进程优先级官网说

2021-03-11 16:04:59 1450

原创 自定义View(三):触摸反馈

参考:学习视频自定义触发反馈重写onTouchEvent(),写入触摸反馈算法,并返回true;如果是ViewGroup并且可能与子View产生触摸判别冲突,还需要重写onInterceptTouchEvent(),在合适的时候返回false来拦截事件流;如果需要临时阻止父View的拦截,可以用requestDisallowInterceptTouchEvent(),这是一个非持久的方法,仅对当前事件流有效。...

2021-03-11 15:18:24 116

原创 自定义View(二):布局

学习视频一、自定义View:布局基础布局过程的自定义方式:重写布局过程的相关方法测量过程:onMeasure()布局过程:onLayout()具体重新onMeasure()来修改已有的View的尺寸重写onMeasure()来全新计算自定义View的尺寸重写onMeasure()和onLayout()来全新计算自定义ViewGroup的内部布局二、全新定义View尺寸的方式重写onMeasure()把尺寸计算出来把计算的结果用resolveSize()过滤一遍后

2021-03-11 15:14:31 176

原创 自定义View(一):绘制

学习视频一、自定义绘制方式:重写绘制方法(最常用:onDraw())绘制的关键:Canvas(是一个绘制工具,主要是绘制和对绘制的辅助这两类方法)Canvas的绘制类方法:drawXXX()(关键参数:Paint)Paint:它是用来保存颜色和各种风格信息(大小,粗细、实心、空心等)Canvas的辅助类方法:范围裁切(clipXXX())和几何变换(Matrix)使用不同的绘制方法来控制遮盖关系二、Canvas对绘制的辅助范围裁切clipRect()和clipPath()

2021-03-10 16:58:47 75

原创 深入理解虚拟机栈

学习视频一、JAVA虚拟机栈1)虚拟机栈是当前执行线程独占空间,以栈的数据结构形式存在。2)虚拟机栈是线程执行的区域,它保存着一个线程中方法的调用状态。3)每一个被线程执行的方法,为该栈中的栈帧,即每个方法对应一个栈帧。  如果是递归调用,比如上面例子中a()方法中调用a()方法,无限制递归栈帧会无限制的存放Frame-a,直到内存满,出现StackOverflowError错误。如下实例:方法的返回地址:一个方法被调用时一定会有一个出口,这个出口就是一个返回地址,一个方法被调用的过程

2021-03-10 13:52:43 2452 1

原创 Handler面试那些事

问题1:一个线程中有几个Handler?答:多个,一个Activity或service就是在主线程中,在主线程中可以new多个Handler。问题2:一个线程有几个Looper?如何保证?答:一个线程只有一个Looper,通过ThreadLocal进行维持。ThreadLocal: <key, value>,ThreadLocal是一个键值对的形式,但是key和value存放在一个数组中,如下格式。key1value1key2value2…Key–>threadLoca

2021-03-09 14:41:55 880

原创 synchronized和volatile的区别,以及synchronized修饰

参考文献:Java并发——线程同步Volatile与Synchronized详解)..Java中synchronized和volatile的区别volatile和synchronized的区别1.Java内存模型(JMM)  提到这两个有关于线程的关键字,那么我们不得不提到Java的内存模型了(JMM),下面我们先看一下Java内存模型在处理多线程方面的工作原理图。  Java内存模型(java Memory Model) 描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中

2021-03-09 10:58:50 711 1

WorkManager源码原理研究

WorkManager源码原理研究

2023-12-24

Navigation源码原理解析

Navigation源码原理解析

2023-12-24

Room应用与源码学习

Room应用与源码学习

2023-12-24

Jetpack之DataBinding技术实战

Jetpack之DataBinding技术实战

2023-12-24

手写一套注入注解绑定框架

手写一套注入注解绑定框架

2023-12-24

Hilt注入技术实现隔离层架构

Hilt注入技术实现隔离层架构

2023-12-24

移动端IOC注入技术Dagger2

移动端IOC注入技术Dagger2

2023-12-24

Lifecycle源码原理解析

Lifecycle源码原理解析

2023-12-24

LiveData源码原理解析

LiveData源码原理解析

2023-12-24

ViewModel综合实战解析

ViewModel综合实战解析

2023-12-24

注解+ 反射实例demo

注解 + 反射实例demo

2022-11-29

三级缓存 + hook 功能demo示例

三级缓存 + hook 功能demo示例

2022-11-11

装饰器模式实现简单demo

装饰器模式实现简单demo

2022-11-08

Android相关学习资料,包含源码和FrameWork内核j解析

可能是2020年最全最详细的Android面试题及答案解析(379页) + Android Framework 开发揭秘 + Android Framework精编内核解析 + Android 百大框架源码解析

2022-11-07

Rxjava demo 手写源码demo示例

根据Rxjava源码仿照写的一个简单demo示例

2022-11-07

手写图片加载Glide框架2

手写图片加载Glide框架2

2022-10-02

手写图片加载Glide框架

手写图片加载Glide框架

2022-10-01

Android与H5之间的调用demo

Android与H5之间的调用demo

2022-08-15

包含静态代理和动态代理demo代码

包含静态代理和动态代理demo代码

2021-07-14

Rxjava简单的示例2时序图.oom

Rxjava简单的示例2时序图.oom

2021-07-13

Rxjava简单的示例1时序图.oom

Rxjava简单的示例1时序图.oom

2021-07-13

图片加载框架时序图.oom

图片加载框架时序图

2021-07-13

ImageLoaderDemo.rar

图片加载框架demo代码

2021-07-13

HttpDemo.rar

网络访问框架---框架中涉及到重试机制和高并发操作

2021-07-08

RxJavaDemo22.rar

手写RxJava基础框架

2021-07-06

RxjavaDemo2.rar

Rxjava基本使用,增加了主线程、子线程相关的处理

2021-06-29

RxJavaDemo.rar

简单的Rxjavademo

2021-06-29

VolleyDemo3--数据库分库实现,及全量升级.rar

网络访问框架,包括下载、断电续传、数据库分库实现,及全量升级

2021-06-23

SortAlgorithm.rar

几种今典的排序算法

2021-06-10

VolleyDemo2--网络下载.rar

有关网络下载的demo

2021-06-03

VolleyDemo1--网络请求.rar

有关网络请求的demo

2021-06-03

HotFixDemo.rar

热修复相关demo示例

2021-06-03

MVVMDemo---listView的使用.rar

MVVM架构中listView的使用

2021-06-01

MVVMDemo--view和model之间的互相更改.rar

view层与model层之间更改,会导致另外一个层的内容发生改变

2021-06-01

MVPDemo--优化版本.rar

MVPDemo--优化版本

2021-06-01

MVPDemo--基础版本.rar

MVPDemo--基础版本

2021-06-01

IntentServiceDemo.rar

IntentService的使用

2021-05-27

PermissionBroadcastDemo.rar

自定义权限在广播中的使用

2021-05-26

PermissionDemo.rar

自定义权限在Activity中的使用

2021-05-26

ParcelableDemo.rar

Android 序列化Parcelable示例demo

2021-05-26

空空如也

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

TA关注的人

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