自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (9)
  • 收藏
  • 关注

原创 JUC学习记录(二)- AtomicInteger

AtomicInteger内部调用了Unsafe的方法,保证原子性;什么是原子性:指操作要么成功要么失败(失败则进行事务回滚)从一个例子从开始学习AtomicInteger Executor executor = Executors.newFixedThreadPool(10); for (int i = 0; i < 10; i++) { executor.execute(() -> { for (int j

2020-06-29 20:24:45 195

原创 JUC学习(一)-CAS与Unsafe

CAS与Unsafe参考自:https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html无锁执行者CAS-乐观CAS全程是Compare And Swap,即比较交换;其核心算法:执行函数CAS(V,E,N)其中:V代表要更新的变量E代表预期值N代表新值算法:当V==E时,修改V=N;否则什么都不做。若V!=E即代表此变量在其他线程中进行了更新。Unsafe前言位于sun.mis

2020-06-27 23:09:13 197 1

原创 代理模式

设计模式之代理模式定义为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。特点:真实对象职责清晰客户端直接调用代理端,保护真实对象UML结构图对图中三个部分进行解释:Subject:抽象角色,定义操作Proxy:代理对象,持有真实对象;客户端直接操作对象RealSu...

2019-11-23 15:24:34 161

原创 SpannableString基本用法

前言平常开发中经常遇到一块的文本信息,其中包括不同的Style,比如说某些字体大小、颜色不一致;包含某些网页链接等等。之前我通常使用多个TextView来实现它们,但是过多的TextView不仅很难维护而且在性能消耗上也比较大;因此就有了这篇关于SpannableString的文章。以此记录。什么是SpannableString?This is the class for text who...

2019-11-23 10:03:50 600

原创 观察者模式

观察者模式一、定义又叫发布-订阅模式;定义了对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。最为典型的例子:EventBus三方框架,主要用于Android的通信。二、UML类图从它的UML类图中可以看出,主要有四个角色:发布者/被观察者(抽象):添加、移除、通知观察者的职责订阅者/观察者(抽象):提供公共的更新方法具体的被观察者具体的观察...

2019-09-17 14:35:11 153

原创 RemoteViews入门

RemoteViewsRemoteViews表示的是一个View结构,实现了Parceable接口-它可以在其他进程中显示;使用场景:通知、桌面小部件.一、RemoteViews的应用通知桌面小部件通知Step :指定Intent,通过PendingIntent获取pi获取NotificationManager(Android O及以上需设置Channel)通过Chan...

2019-08-22 16:58:25 197

原创 Android-XML解析

Android-XML解析常用解析方式(直接上代码没什么好讲的)本例直接从assets文件中读取xml文件。<apps> <app> <id>1</id> <name>Google Maps</name> <version>1.0</version...

2019-06-25 09:19:01 79

原创 求平方根之牛顿迭代法

牛顿迭代法牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。推导过程:代码实现: public static int mySqrt(int x) { if (x < 0) return (int) Double.NaN...

2019-06-24 15:11:34 303

原创 Android、JS交互

顺应大前端的潮流,Hybrid APP越来越重要,学习一波Android与JavaScript的交互方式。原理:通过WebView这个中间组件来相互调用一些基础的配置:val webSetting = webView.settings // 允许与JS交互webSetting.javaScriptEnabled = true// 允许弹窗webSetting.javaScriptCa...

2019-06-10 10:24:20 143

原创 Android View工作原理

前言在Android知识体系中,View扮演了很重要的角色;它是Android在视觉上的呈现,Android本身提供了一套GUI库,但是我们的需求不止于系统自带的GUI,因此我们还需要自定义View。而自定义View过程中我们势必要对View的底层工作原理有所了解。这篇文章就记录一下View的测量、布局、绘制三大流程。1.一些必要的基本概念1.1 ViewRoot和DecorViewVie...

2019-05-23 11:32:28 153

原创 Java设计模式之单例模式(Singleton)

1.简介保证一个类仅有一个实例(防止实例化多个对象),且提供一个访问它的全局访问点。可以严格的控制客户怎么访问它,何时访问它。它与静态工具类的不同点:静态工具类不保存状态,仅提供静态方法与静态属性静态工具类不能用于继承静态工具类是方法属性的集合,单例类有着唯一的对象实例减少JVM对于new的消耗2.如何实现?私有构造提供全局访问点内部构建函数3.实现方式懒汉式...

2019-05-21 16:16:19 97

原创 Android APT案例

APT(Annotation Processing Tool)即注解处理器,是一种注解处理的工具,用来在编译器扫描以及处理注解。以注解作为桥梁,通过预先设定好的代码规则来生成对应的Java代码。实际开发中有很多开源框架都是用到APT,例如:ButterKnife,Dagger2,EventBus,Spring框架等。APT原理:在注解了某些代码元素(字段、函数、类)后,编译器检查Abstrac...

2019-04-02 15:19:22 990

翻译 Android AAC学习(二)

在第一节中主要介绍了Licycle、LiveData以及ViewModel的简单使用,这一节记录一下Room的学习。什么是Room?附上官方文档:https://developer.android.google.cn/training/data-storage/room/index.htmlRoom持久库提供了一个SQLite抽象层,使得我们访问数据更加的稳健,提升数据库性能。能够让用户在...

2019-03-27 11:33:52 261

原创 ConstraintLayout详解

1.介绍约束布局ConstraintLayout本身就是一个ViewGroup,它用来解决布局嵌套过多的问题(嵌套越多,绘制消耗的时间越长),以灵活的方式定位/调整小部件(API 9以上均可使用),相比RelativeLayout更灵活,性能更加的出色,更好的适配屏幕大小不同的机型。Android Studio 2.3开始默认创建Activity是都是使用它。2.使用使用它也非常的简单,高版...

2019-03-25 16:46:06 235

原创 Android AAC学习(一)

什么是AAC?Google官方DEMO即Android Architecture Components,谷歌在Google I/O 2017上发布的帮助开发者构建易于维护测试/健壮的架构设计方案。它的核心应该是基于观察者模式的,其主要的两大内容就是:生命周期相关的 Lifecycle-aware Components(生命周期感知组件)数据库解决方案 Room组件功能:处理数据持久化...

2019-03-22 15:28:28 1665

原创 DownloadManager的使用-更新APP-兼容8.0

项目中APP的版本更新使用的是Bugly,感觉不好控制。在网上找了许多资料,无意间发现了DownloadManager这个API提供的工具,特此学习并记录一波。DownloadManager介绍DownloadManager是Android2.3(API 9)提供的系统服务,用来处理长时间的下载操作。它可以构建一个后台下载服务,在发生故障或者连接更改、系统重启等情况下自动的处理HTTP连接以...

2019-03-21 15:08:24 1125 1

原创 AsyncTask使用

AsyncTask是一个轻量级的异步任务类。它可以在线程池中执行耗时的后台任务。然后把执行的进度和结果传递给主线程并且在主线程中更新UI。AsyncTask基本介绍本身是一个抽象类:public abstract class AsyncTask<Params, Progress, Result> {}其中参数如下:泛型意义Params异步任务的入参,比...

2019-03-18 17:43:13 170

原创 Android各个版本对应的API及名称

开发时遇到挺多次的,每次都要去找API对应的版本以及名称,记录一下!最近好忙。。。直接使用Android Studio 设置中搜索SDK,如下图:

2019-03-15 10:08:27 2966

原创 Java注解Annotation

Annotation翻译过来为注解、释文等。而在Java中注解算是一个尤为重要的知识点,而且不易理解。摘抄至百度百科:java.lang.annotation,接口 Annotation。对于Annotation,是Java5的新特性,JDK5引入了Metadata(元数据)很容易的就能够调用Annotations。Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者...

2019-03-07 15:19:17 162

原创 Android自定义View-手势检测(GestureDetector)

Google为了方便我们进行手势检测,早就封装了相关的内容提供我们使用。即Android手势检测,主要就是对GestureDetector类的使用和说明。1.GestureDetectorGestureDetector可以使用MotionEvents检测各种手势和事件。其内部包含四个监听器(三个接口以及一个外部类):接口含义OnGestureListener手势检测:包...

2019-02-27 11:26:08 895

原创 LruCache与DiskLruCache的使用

在前面的Bitmap文章中提到,Bitmap在使用中非常容易出现OOM,而本节主要介绍2个方法对加载多图/大图的情况进行优化,有效的避免OOM。1.LruCache缓存在使用RecyclerView、ListView等加载多图时,屏幕上显示的图片会通过滑动屏幕等事件不断地增加,最终导致OOM。为了保证内存始终维持在一个合理的范围,当item移除屏幕时要对图片进行回收,重新滚入屏幕时又要重新加载...

2019-02-26 10:31:38 821 1

原创 Android-Bitmap的简单使用及其优化

在日常开发中不可避免的都会遇到图片展示的功能,而通常都会使用到Bitmap,且每个程序都有相应的最大运行内存;由于Bitmap所消耗的内存相当的大(超出程序最大运行内存)在加载多、大图的时候非常容易引起OOM。。这篇文章简单介绍Bitmap的优化以及内存的计算方式。如何获取我们当前程序的最大运行内存?int maxMemory = (int) (Runtime.getRuntime().max...

2019-02-18 16:59:22 226

原创 Java CountDownLatch线程同步辅助类

最近几篇文章都是关于线程的,本篇文章也同样是关于线程的。工作中,肯定少不了公司开会这一步骤;而开会时也需要等到开会人员全部到场后会议才能开始,这时候我们该如何实现呢?当然是使用Java API中的CountDownLatch线程同步辅助类了。1.CountDownLatch介绍使用CountDownLatch辅助类,调用await()后可以让线程等待其他线程完成一组操作/步骤后继续进行,否...

2019-02-14 10:40:55 192

原创 Java-Notify、NotifyAll、Wait使用

上篇文章中学到了Synchronized的使用,这篇文章就介绍一下Notify、NotifyAll、Wait。1.Notify、NotifyAll、Wait这三个方法均属于Object类,但是它们多用在多线程中。三者的区别以及各自的含义(使用的注意事项):notify: 唤醒一个正在wait当前对象锁的线程,并继续执行notifyAll:唤醒全部在wait当前对象锁的线程,所有线程...

2019-02-13 19:58:33 268

原创 Java之Synchronized关键字

在多线程环境中,有可能会出现多个线程同时访问同一个资源的情况,资源可以是:一个文件、变量、对象、数据库表等。而单个线程的执行过程是不可控的,可能导致结果与逾期不同。这个资源被称为“临界资源”(也称共享资源)。1.什么情况出现线程安全问题情况重现:public class Main { public static void main(String[] args) {// ...

2019-02-12 14:38:52 143

原创 Android drawable文件夹那些事

大家都知道Android drawable文件夹是用来放置图片以及selector等等资源的。通常我们创建一个项目自动会创建很多的文件夹比如:mipmap/mipmap-xxhdpi之类的。但是这么多不同后缀的文件夹有什么区别呢?我们来学习一下。1.mipmap系列为了将APP Logo与其他使用的图片资源分割开来,比那与管理注意点与drawable系列一致。2.drawable系列...

2019-01-30 17:55:58 4264

原创 Java设计模式之装饰者模式(Decorator)

1.简介设计原则:开发-封闭 多组合少继承指在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。他是通过创建一个包装对象,也就是装饰来包裹真实的对象。特点:装饰对象和真实对象(被装饰的对象)具有相同接口;装饰对象包含一个真实对象的引用;装饰对象接受所有来自客户端的请求并转交真实对象;装饰对象可以在转发请求之前/后添加附加功能组成:成分抽象构建(Co...

2019-01-30 10:15:03 138

原创 Android Handler基本原理及使用

众所周知,Android 不允许在子线程中更新UI;比如在进行下载文件等操作时,需要动态的更新下载的进度呀怎么做呢?我们可以使用RxAndroid等开源框架或者使用Handler来完成它。为什么不允许在子线程中访问UI?因为Android的UI控件不是线程安全的,如果在多线程中并发访问可能会导致UI控件处于不可预期的状态;UI控件上锁后的缺点:让UI访问的逻辑变得复杂;锁机制会降低UI访问效...

2019-01-28 15:10:34 209

原创 Java设计模式之策略模式(Strategy)

为什么要学习设计模式?我们之所以要学习设计模式,并不是把具体的某些模式原原本本地照搬来用,而是通过学习这些模式,了解到底什么是“封装变化”,“对象间松耦合”,“针对接口编程”等概念,从而设计出符合前面所讲到四个特性——易维护,易扩展,易服用,灵活性好的程序。1.简介指对象的某个行为在不同时间/场景下有不同的实现方式,即实现的算法。策略模式是定义一系列算法的方法,从概念上来看,所有这些...

2019-01-25 15:28:17 205

原创 Java Serializable序列化高级

之前的文章中有介绍Android种的序列化的相关知识,但是对于一些深入的知识没有说明并且学习到,这篇文章记录一下。Android序列化相关知识.1.Serializable使用的几个注意点客户端A与客户端B通过网络传输数据C,客户端A将C序列化后传给B,B在反序列化得到数据。C类在客户端A/B中所处的包以及包名必须完全一致,且实现Serializable接口,同时serialVersion...

2019-01-25 10:46:50 111

原创 Java-RandomAccessFile使用

前几篇文章讲的是File以及相关流的使用,这节主要介绍随机访问文件的使用。随机访问文件,如其名:使用它能够对文件进行一系列的随机操作。1.RandomAccessFile基本介绍看看它的类继承结构吧:可以看出它继承了Object类以及实现了DataOutput, DataInput, Closeable三个接口,我们可以看出它并没有继承自IO流体系中的任何一个,但是它本身使用的是字...

2019-01-24 16:38:08 625

原创 Java IO流

1.IO整体概括Java中的IO体系主要分为以下三大类个人总结,不是很完整,如有出错,请多多指教。未列出全部方法,有的方法类似直接省略。io流的整体分类:输入流输出流字节流InputStreamOutputStream字符流ReaderWriter什么是输入输出呢,我以我个人认知的简单叙述:(有点简陋)输入流:以程序本身为参考点,简单说就...

2019-01-22 21:41:19 91

原创 Java File类使用及获取整个目录下的文件/删除整个文件夹

1.File类Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。有以下四种方法构建一个File对象:File(File parent,String child):以父抽象路径名和子路径名字符串创建新的File实例。File(String pathName):给定路径名字符串转换为抽象路径名来创建新的File实例。File(St...

2019-01-21 21:12:48 32778 5

原创 Java-BigDecimal高精度运算

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等...

2019-01-20 22:30:05 227

原创 Android中资源文件小结

参考自:感谢大佬们的帮助1.@类型一:(引用自定义资源)形如:android:xx = &amp;quot;@[package:]type/name&amp;quot;,自定义package:省略例如: android:text=&amp;quot;@string/app_name&amp;quot; android:textColor=&amp;quot;@color/gary&amp;quot;类型二

2019-01-18 10:46:22 216

原创 Android UI之小球运动

前言最近接了个私活(比较简单),其中用到了自定义小球的部分,借此学习并记录一下。。要求:绘制一个运动的小球,小球有4个运动方向,分别是45度、135度、225度和315度。开始时小球位于任意位置,并以4个方向中的任意一个方向开始运动,当遇到区域边缘(屏幕边缘)时,以相反角度(镜面反射)回弹。整体思路:自定义小球view获取屏幕宽高,生成随机圆心坐标,定义四个反向的运行速度定义一...

2019-01-04 22:00:43 1192

原创 Android自定义View基础相关

我们在日常开发过程中,除了使用Google官方提供的控件外,还会自定义View来完成需求;而对于我(小白)来说,肯定是需要从最基础的东西开始了。1.View相关的基础知识坐标系在Android中的坐标系与我们数学中的坐标系有些不同,传统的坐标系如图:而Android的屏幕坐标如下图:由图可以清楚的看出,Android中是以左上角为坐标原点的。角度以及弧度角度与坐标系类似,以...

2018-12-27 21:17:29 90

原创 SharedPreferences使用时的注意事项

1.SharedPreferences使用中遇到的问题SharedPreferences是Android存储手段之一,之前的文章也有介绍,有兴趣的可以去历史文章中查看。刚刚到公司实习的第二周,从0开始一个小项目,内心很是慌张;赶紧加紧学习的步伐。在退出登录的逻辑这里出现了点问题。问题:点击退出登录时,清空SharedPreferences中token等用户信息,实际清空失效。最后疯狂G...

2018-12-25 21:27:55 928

原创 Android动画详解(三)

我们日常开发中,很多情况下都是在系统原有的View上进行Animator操作的;在Android 3.1之后,开发团队新增了ViewPropertyAnimator类,它是专门针对于View而设计的动画类。于ObjectAnimator/ValueAnimator相比较,它使用及其的简单。1.使用方式ObjectAnimator//透明度 final ObjectAn...

2018-12-24 20:52:05 336 2

原创 Android动画详解(二)

上一篇总结了View动画相关的知识,这一节主要学习Android种的属性动画–也是当前最经常使用的一种动画。它能实现View动画所不能实现的一些动画效果。1.简介属性动画(Property Animation)是在 Android 3.0(API 11)后才提供的一种全新动画模式,它大大解决传统动画的局限性,如:经过动画后,其点击事件的响应区域依然未改变。它具有相当高的灵活性,我们可以通过反射...

2018-12-19 21:04:00 117

APTDemo案例

APTDemo案例

2019-04-02

LruCache/DiskLruCache实现照片墙

LruCache/DiskLruCache实现照片墙

2019-02-26

补间动画/逐帧动画

补间动画/逐帧动画

2018-12-10

Android 广播接收器案例

Android 广播接收器案例

2018-12-08

ContentProvider使用案例

ContentProvider使用案例,ContentProvider使用案例,ContentProvider使用案例

2018-11-18

java反射demo

java反射demo

2018-11-13

运动小球demo,UI

绘制一个运动的小球,小球有4个运动方向,分别是45度、135度、225度和315度。开始时小球位于任意位置,并以4个方向中的任意一个方向开始运动,当遇到区域边缘(屏幕边缘)时,以相反角度(镜面反射)回弹。

2018-10-20

自定义HeaderBar

自定义HeaderBar

2018-09-17

个推聊天小案例

####--2.app端集成retrofit2,完成相关网络请求 发送流程: 包装Message(content,senderId,receiverId)->通过网络请求传给服务器->服务器接受根据receiverId,透传给另一个客户端(调用pushMessage接口)

2018-09-16

空空如也

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

TA关注的人

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