自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (25)
  • 问答 (1)
  • 收藏
  • 关注

原创 ThreadLocal笔记

在java中,变量值得共享可以使用public static变量的形式,所有的线程都使用同一个public static变量。如果想实现每一个线程都有自己的共享变量该如何解决呢?这个时候就需要用到ThreadLocal了。类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子可以存储每个线程的私有数据。

2022-02-14 18:07:48 152

原创 jetpack之databinding

databinding的源码记录

2022-02-13 17:13:42 1306

原创 jetpack之ViewModel

jetpack之ViewModel

2022-02-13 17:12:51 1519

原创 jetpack之LiveData

LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。引用自官方文档使用LiveData的优势使用LiveData又以下优势1.确保界面符合数据状态LiveData 遵循观察者模式。当底层数据发生变化时,LiveData 会通知Observer对象。您...

2022-02-13 17:12:08 1863

原创 jetpack之LifeCycle

jetpack的LifeCycle的源码阅读笔记,希望可以给你一些帮助

2022-02-13 17:10:16 519

原创 Kotlin的一些特性记录

kotlin的一些高级特性,让你能够像js 一样使用kotlin,中缀表达式,函数作为参数传递,lamada表达式

2022-02-13 17:08:26 882

原创 Synchronized 和 Lock

Sychronized关键字 在java多线程的问题中占有举足轻重的地位。这里记录一些易错的关于Sychronized的知识点。1.一个是对象锁(作用在具体的对象实例上的),另外一个是作用在static修饰的方法addB是类上的,他们两个锁之间不存在竞争的关系,也没有范围大小关系,总之没有半毛钱的关系。获取了对象锁的线程A 调用addA ,不会影响另外一个线程B 获取锁调用addB方法,因为...

2021-10-28 13:34:53 179

原创 Handler 笔记

Handler在Android基本上是无处不在,四大组件通信,我们自己写代码中,线程之间通信,都在用Handler。在面试中Handler也经常被问到的,所以今天特此记录一下。Handler构造函数打开Handler源码,我们可以看到Handler有以下几个构造函数:这里的构造函数 主要可以分为两类:传递参数Looper(下面3个)的 和 不传递参数Looper(上面4个)的。先看不带Looper参数的构造函数:public Handler() { this(n...

2020-06-21 14:44:51 363

原创 Android APK 签名、打包笔记

我们知道,一款Android 要发布的话,必须经过签名,Android目前支持的签名方式包括三种:v1 方案:基于JAR签名。 v2 方案:APK 签名方案 v2(在 Android 7.0 中引入)。 v3 方案:APK 签名方案 v3(在 Android 9 中引入)。为了最大限度地提高兼容性,请按照 v1、v2、v3 的先后顺序采用所有方案对应用进行签名。与只通过 v1 方案签名...

2020-06-08 22:06:02 4803

原创 Gradle Transform 与 字节码插桩

gradle用于构建项目,其plugin插件用于完成一特定功能,而有些时候我们希望在插件中完成对项目内容的一些更改,这就需要我们在gradle构建过程中,获取到源文件才能进行,所幸的是,gradle plugin从1.5.0版本开始,为我们提供了Transform功能,它可以以输入输出流的链式方式,供我们对源文件进行处理。Transform功能的结构:QualifiedContent...

2020-04-22 15:06:42 1701 3

原创 Gradle 自定义插件

上一篇文章提到了gradle的相关知识和自定义task,这一节我们就讲一下自定义插件的开发。自定义插件在Android中的使用尤为重要。 在gradle的相关文档中说,我们可以构建插件的相关代码,直接卸载构建脚本中,无需任何操作就能够编译使用插件。但是这样的话,该脚本插件只能在当前构建脚本中可见,不能外部可见,也不能重用。所以要达到重用的目的,就需要将其编写为插件。bui...

2020-04-21 13:51:44 513

原创 Gradle开发之Android项目中的gradle

作为一个Android开发人员,相信大家每天开发都在与Gradle打交道,它是一款非常优秀的构建工具。基于Groovy语言实现,但是又与java完全兼容,在编写Gradle脚本的时候,完全可以按照java的语法去写相关的类,变量,方法。Gradle 项目构建生命周期Gradle 的生命周期分三个阶段,初始化阶段,配置阶段,执行阶段.那这三个阶段在做什么事情呢?请看每个阶段的描述...

2020-04-20 14:26:18 470

原创 Android 增量更新

随着社会的发展,虽然对于一个用户而言,流量不值钱,每个用户的手机会有多少个G的流量,或者不限制流量,或者经常使用wifi。所以目前在Android端流量的优化,可能没有那么重要了。但是当我们的用户更新一个app的时候,每次都需要下载一个完整的app有可能要等几分钟,像王者荣耀这样大型的游戏app,下载完整的app至少几百兆,但是我们新的补丁包有可能只有几十兆,或者几兆,这样让用户使用新的功...

2020-04-13 15:15:21 499

原创 Kotlin实战笔记--类,接口,对象

Kotlin定义类的结构Kotlin的类和接口与java的类和接口还是有一点区别的。例如,接口可以包含属性声明。与java不同,Kotlin的声明默认是final和public的。此外嵌套类默认并不是内部类:它们并没有包含对其外部类的隐式引用。Kotlin中的接口 Kotlin的接口和java8中的相似,它们可以包含抽象的方法的定义以及非抽象方法的实现,但是它们不能包含任何状态。...

2020-04-12 19:00:46 475

原创 线程池

在java中,使用线程来执行异步任务。java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建和销毁将消耗大量的计算资源。同时,为每个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用崩溃。因此线程池就诞生了。相关类和接口 与线程池相关的主要有以下的类和接口:Executors 工厂类,里面提供许多封装好的创...

2019-11-10 16:07:05 209

原创 Android 注解和注解处理器 的使用

注解简介注解(Annontation),Java5引入的新特性,位于java.lang.annotation包中。提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。是一种说明、配置、描述性的信息,与具体业务无关,也不会影响正常的业务逻辑。但我们可以用反射机制来进行校验、赋值等操作。注解的定义定义一个Annotat...

2019-11-05 19:36:46 1161

原创 Android换肤技术

所谓换肤技术,就是用户可以根据自己的喜好,选择自己喜欢的并且APP提供的颜色,背景图片,作为整个app的主题背景颜色,或者字体颜色等等...满足用户的需求。APP换肤 主要分为2种:1.内置换肤:就是将换肤所需要的图片资源,或者颜色资源,在打包的时候,打包到APK当中2.皮肤包换肤:就是 当用户选择某一款皮肤的时候,动态从服务器下载打包好的皮肤包,然后解析出相应的图片资源...

2019-11-01 18:27:51 291

原创 Android插件化的实现(3)--LoadedApk式插件化的实现

上面介绍了关于插桩式插件化实现和Hook式插件化的实现,也分析了他们的优缺点。这次来讲解一下自定义LoadedApk式的插件化实现。 LoadedApk形式的插件化实现大致流程和需要反射的点如下图(我是基于Android28的sdk下反射):流程:1.首先还是需要Hook AMS 相关的检查,将需要启动的插件的Activity 替换成能够绕过AMS检查的Pr...

2019-10-26 22:25:12 728 2

原创 Android插件化的实现(2)--Hook式插件化的实现

插桩式的插件化实现,每次都必须使用宿主的Context ,去加载插件的layout.xml,activity,service,对于静态广播的注册使用到反射,需要对不同版本的sdk的进行兼容。 Hook式插件化的实现,就是通过Hook的方式,用动态代理拦截系统的源代码实现,加上自己的处理逻辑。以一个简单的小例子,来说明动态代理的原理实现 以及 逻辑。public cl...

2019-10-26 22:24:22 425

原创 Android插件化的实现(1)--占位式(插桩式)插件化的实现

什么是插件化? 插件化出现的主要原因,我个人认为是解决了越来越大的庞大的APK的体积,用户在下载一个APK的时候,只需要将主要的功能打包到APK中,当用户要使用某些不常用的功能的时候,我们就使用动态下载APK的方式,供用户使用,其实这就是插件化的技术。其实通俗的讲,就是一个运行的APP(宿主),去加载没有安装运行的APK文件,可以使用该APK文件里面的功能。如下图所示。占位...

2019-10-26 22:16:03 489

原创 AndroidUI 自定义View--任意系统控件上添加自定义属性

看到标题,我们想到,如果要在系统控件上加上自定义属性,并且能够解析出来。这好像有点不可能。我们经常容易想到的是,自定义一个View来继承系统控件,然后解析自己写的attr,这样可以达到使用自定义属性,但是此时就不是系统控件了,是自定义控件了,我们想要实现的效果是下面这样的:<ImageView android:id="@+id/iv_0" ...

2019-05-19 17:51:16 1087

原创 Android的View 相关记录

View在Android是所有控件的基类,他是一种界面层的控件的一种抽象,代表了一个控件。除了View外还有ViewGroup,里面可以包含许多控件。在Android中,我们可以将View的这种关系称之为控件树,类似数据结构中的树,具有一定的层级关系。View的位置参数View的位置主要由它的四个顶点来决定,分别对应于View的四个属性:top,left,right...

2019-05-12 22:06:50 162

原创 Android UI 之 Region, SVG,不规则自定义控件

Region Region就是区域,范围的意思,代表Android话不中绘制的某一个区域,它有一些适用的API,在自定义控件,或者不规则控件的点击事件中,非常有用。 Region有四个构造函数,这都很好理解 public Region() { //创建一个空的区域 .... } public Region(Regio...

2019-05-12 22:03:15 705

原创 AndroidUI之PathMeasure,PathEffect

PathMeasure顾名思义,它是一个path(路径)的测量工具。我们可用通过它的一些API得到当前路径上某个点的坐标,还有夹角等信息,这些信息在自定义控件中都很适用。PathMeasure都会和一个或者多个Path结合使用。先看常用的API。构造方法 //构造方法1 public PathMeasure() { mPath = null; ...

2019-05-12 22:00:50 293

原创 AndroidUI之Matrix

Matrix在android开发中,特别是一些高级UI的绘制中,做平移,旋转,缩放,错切操作很是适用,但是其实Android的API中已经帮我们封装好了Matrix的很多方法和操作,现在就想记录一下学习的过程。 打开Android的Matrix的API(我用的SDK版本是28),首先可以看到9个常量: public static final int MSCALE_X = ...

2019-05-12 21:59:30 900

原创 AndroidUi之Canvas,Path

画布,在我们android的View或者自定义View中占有举足轻重的地位,在android中它的意义也是字面的意思,我们可以通过画笔绘制几何图形,文本,路径或者位图。我们可以将Canvas的API主要分为三类,一类是绘制相关的,例如drawText,drawLine...,一类是变换相关的,canvas.translate、canvas.rotate....,还有一类是状态保存和...

2019-05-12 21:56:40 798

原创 AndroidUi之Paint

Paint意思就是画笔,保存了绘制几何图形,文本,位图的样式和颜色信息。在android的API中Paint类里面存在大量的setter和getter方法,用来获取或者设置我们上面所说的样式和颜色信息。画笔常用的API 和使用方式 private void init(){ mPaint = new Paint(); mPaint.setC...

2019-05-08 22:38:07 361

原创 Application相关之坑

最近在接入腾讯云的维纳斯(长连接,推送)服务的时候,业务需求是,需要用某个接口中间的某个字段来控制服务端是否使用维纳斯服务,如果不使用,就启动我们项目之中原来的心跳,如果使用,就关闭心跳,用维纳斯服务,所以自己做了某个开关控制维纳斯是否可用。但是在实际项目中维纳斯服务总是无缘无故的“服务主动断开”,有时候会主动重连有的时候不会主动重连上,在官网给的demo里面测试不会出现这种情况,经过多方排查,基...

2019-03-21 13:53:11 207

翻译 ConstraintLayout的使用

ConstraintLayout的诞生,是为了解决我们在平常开发中的复杂多层级布局的问题,在一定程度上进行布局的优化。它有些类似RelativeLayout的功能,都是通过View质之间的相对位置或者View相对于父布局的位置来控制的。但是ConstraintLayout比Relative更加的灵活,方便。而且Android studio提供了ConstaintLayout的可视化编辑工具,可以直...

2018-08-26 17:39:39 5104

原创 调用系统相机拍照和自定义相机拍照。

    前一段时间,做项目的时候遇到了一个需要上传身份证的小功能,想了向需要

2018-06-14 23:45:05 424

翻译 ImageView 的ScareType记录

在Android的项目开发,图片是我们项目中占有举足轻重的地位。但是由于Android不同手机的适配,不可能UI设计人员所给的切图在每个手机上都恰到好处的大小。所以此时我们应该善于应用Android系统为ImageView为我们提供的Scaretype属性。科比镇楼,这张图片的原始尺寸2000*1333,相信这个尺寸的图片在任何手机上显示不下。直接来重点。在XML中ImageView 是这么设置的...

2018-05-23 23:22:54 502

原创 关于Scroller ,scrollTo,scrollBy

最近想总结一下,关于View滑动的知识,也为下一篇View的滑动总结记录一下这个知识点点吧。提到这个,先说说Android的坐标系吧。Android中的坐标系 Android中有2种坐标系,分别称之为Android坐标系和视图坐标系。而对应的也有一些相关的方法可以获取坐标系中的坐标值,只有搞清楚这些区别,才能在使用的时候,不至于出错或者得不到你想要的效果。1.Andro...

2018-05-06 15:40:13 933

原创 关于View的invisible和Gone的区别

先看前几天写的内容的一段XML文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="ve

2017-03-25 21:39:44 1049

原创 移动支付--银联,支付宝,微信(android)

相信大家一定用支付宝支付过你所购买的商品,那作为一个移动开发人员,在这个移动互联网高速发展的时代,作为一名开发人员,我们也有必要了解接触一些移动支付方面的开发知识了。支付宝支付的一般步骤:1.在对应的App(淘宝)中选购商品。     2.生成支付宝支付订单     3.提交订单

2016-12-23 16:00:53 4408 3

原创 View绘制详解

在介绍View绘制之前先来介绍一下LayoutInflater,而介绍LayoutInflater之前,先介绍一种单例实现模式:使用容器实现单例模式public class SingletonManager {   private static Map<String, Object> objMap = new HashMap<String,Object>();  ...

2016-12-23 12:01:14 2320

原创 Android 中listView的多个Item复用问题

最近接触到了listView中多个Item复用的问题。listView使我们Android开发中非常常见的一个控件,可以说任何一款应用都会使用到他,所有呢,这个控件也被别人研究的比较多。常用的一般复用方法,大家应该都清楚。convertView的复用,使用ViewHolder,使用LruCache,异步加载等等。这里就是记录我开发当中遇到的listView的多个item复用的方法和一些处理的坑。。

2016-11-01 13:53:15 3831

原创 Android之高斯模糊的记录

最近在开发项目的时候遇到一个UI提出的效果就是PS里面的高斯模糊效果,上图                                                                                   下面其实是一段文本内容,但是当用户没有获取到某种权限的时候,是不能查看具体的文字内容的(但是又给用户一种下面有文字内容的模糊的感觉)。当用户点击偷瞄

2016-10-29 11:40:15 2359

原创 Android中的Handler解析

提到Handler大家并不陌生,Handler是android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以通过它发送消息,也可以通过它处理消息,它既可以发送消息也可以接收消息。当我们在子线程中对UI进行更改的操作的时候,应用汇崩溃,系统提示我们不能再子线程中进行更新UI的操作。这时候Handler就可以派上用场了。为什么要使用Handler呢,其实谷歌工程师估计考虑到程序员对于

2016-09-12 14:37:35 5323

原创 Android中DownLoadManager的使用

项目本来开始使用的是友盟的自动提示更新功能,现在由于应用市场,系统厂商,运营商等多方面对友盟自动更新服务的限制,友盟将于2016年10月份停止所有应用的自动更新服务,这就让我倒霉了,得自己在客户端写自动更新的功能,目前所用到的是Android中DownLoadManager。DownLoadManager也不是什么新鲜玩意了,从Android2.3(API level 9)开始Android用

2016-09-09 16:04:34 5970

原创 Android评分控件RatingBar的相关问题

RatingBar,Android系统原生的评分控件,类似淘宝一类的电商APP在购买支付,确认付款之后都会有评价和评星级(评分的)功能,也可以用这个去实现。

2016-09-05 13:48:16 3348

AndroidDemo.zip

Android 自定义插件和Transform 实现360加固 和 字节码插桩,使用ASM进行字节码插桩,实现修改项目生成的class文件的字节码的操作

2020-04-20

BsDiffDemo.zip

增量更新不仅能够减轻服务端的压力,也能够在客户端更新的时候,使用更少的流量。但是android的增量更新需要解决一个问题,就是多渠道包的问题,

2020-04-12

GifDemo.rar

在Android 的 SDK 中其实有系统播放Gif的源代码,只不过使用C语言写的,利用Android SDK中的源码来播放Gif。

2020-01-19

EventBusDemo.zip

以Eventbus讲解APT的相关技术,引出APT的使用,javaPoet的使用

2019-11-02

SkinChange.zip

利用Application.ActivityLifecycleCallbacks来监测各个Activity的生命周期,然后获取到当前Activity里面的所有控件,遍历所有空间实现换肤

2019-10-27

SkinDemo.zip

从android源码,分析layout.xml的加载过程,然后巧妙利用自定义LayoutInflator实现动态换肤的过程

2019-10-26

LoadedApkPluginProject.zip

基于Android9.0的源码分析,自定义LoadedApk和ClassLoader来加载插件的Class文件

2019-10-25

HookPluginProject2.zip

基于AndroidSDK 28(9.0)分析Activity的启动流程,并且Activity的class的加载过程,实现插件化

2019-10-19

HookPluginProject1.zip

基于AndroidSDK 28分析Activity的启动流程,并且Activity的class的加载过程,实现插件化

2019-10-17

HookPluginProject.zip

基于AndroidSDK 28分析Activity的启动流程,并且Activity的class的加载过程,实现插件化

2019-10-17

PluginProject1.zip

插件化的实现方法,通过占位式的插件化,实现插件当中的activity ,service,动态广播,静态广播的注册

2019-10-09

FFmpegDemo.rar

使用FFmpeg进行音视频解码处理,将视频文件,分别单独解析成RGBA,然后渲染在surfaceView上面。

2019-09-23

DiscrollveDemo.zip

demo中使用两种方式来实现,系统控件上添加自定义属性,来扩展我们系统的自定义控件,不需要去继承系统控件实现自定义控件

2019-05-19

UiDemoCanvas.zip

Android UI 之 Canvas Path的相关APi的使用讲解Demo。粒子爆炸效果,QQ消息气泡效果,Splash动画效果

2019-05-09

Paint的使用

列举讲解paint的相关API,以及使用方法,带你玩转美图的P图效果

2019-04-27

SVGRegion的使用

此Demo主要是讲解SVG的使用,以及Region,自定义不规则控件 以及其事件的响应

2019-04-27

PathMeasure 和 PathEffect的实例

文章中所讲到的关于PathMeasure的API 已经 PathEffect的相关API的使用的实例

2019-04-27

自定义相机Demo

自定义相机实现Demo,里面主要记录的是相机所拍照片的角度问题,细节还需自己调节或者借鉴google开源的CameraView里面很详细

2018-06-14

Scroller的Demo

我写的scroller相关博客里面的Demo,本来不想要分的但是为毛非得选择资源分,我也不知道为什么好久没有用CSDN这个玩意 了额,抱歉了

2018-04-23

高斯模糊demo

Android高斯模糊的demo

2016-10-29

属性动画详解

属性动画,API

2016-06-23

通讯录实现二

通讯录的原型实现,仿QQ好友列表,分组名悬浮在最顶部

2016-06-16

通讯录源码实现

通讯录源码实现

2016-06-14

android遮罩小实例

可以以此来做一些类似QQ,微信登陆的好友图像

2014-10-13

网上书城asp.net

网上书城,学习可用,可以供爱好网络学习的人参考参考

2012-05-24

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

TA关注的人

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