自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java-HashSet详解

Java-HashSet详解HashSet是Set的一种实现方式,底层主要使用HashMap来确保元素不重复。1. 成员变量private transient HashMap<E,Object> map;//内部使用HashMapprivate static final Object PRESENT = new Object();//虚拟对象,用来作为value放到map中2. 构造方法public HashSet() { map = new HashMap<>

2020-08-26 16:25:45 589

原创 Java-List详解

Java-List详解一,ArrayListJDK源码中对ArrayList类的注释,大致翻译如下:实现了List的接口的可调整大小的数组。实现了所有可选列表操作,并且允许所有类型的元素,包括null。除了实现了List接口,这个类还提供了去动态改变内部用于存储集合元素的数组尺寸的方法。(这个类与Vector类大致相同,除了ArrayList是非线程安全外)size,isEmpty,get,set,iterator,listIterator方法均为常数时间复杂度。add方法的时间复杂度为常数级别,这意

2020-08-24 10:25:58 343

原创 Java-HashMap详解

Java-HashMap1. 主要用途HashMap是基于Map接口实现的一种键-值对的存储结构,允许null值,同时非有序,非同步(线程不安全)。HashMap底层实现是数组+链表+红黑树(JDK1.8增加了红黑树部分)。它存储和查找数据时,是根据键的hashCode的值计算出具体的存储位置。HashMap最多只允许一条记录的键位null,HashMap增删改查等常规操作都有不错的执行效率,是ArrayList和LinkedList等数据结构的一种折中实现。2. 源码分析2.1 部分成员变量分析

2020-08-21 21:22:37 422 1

原创 Service的工作过程

Service的工作过程1. Service的启动过程从startService方法看起:startService(intent);跟进,来到了ContextWrapper的startService方法public ComponentName startService(Intent service) { return mBase.startService(service);}mBase的类型是ContextImpl,Activity被创建时会通过attach方法将一个Context

2020-08-19 16:57:34 357

原创 Activity启动流程

Activity启动流程SDK版本:25通常启动一个Activity是从startActivity()方法开始:public void startActivity(Intent intent) { this.startActivity(intent, null);}跟进:public void startActivity(Intent intent, @Nullable Bundle options) { if (options != null) { startAct

2020-08-19 08:48:33 221

原创 Android-Drawable

Android-DrawableDrawable表示的是一种可以在canvas上进行绘制的抽象的概念,它的种类有很多,最常见的颜色和图片都可以是一个Drawable。1. Drawable简介Drawable有很多种,他们都表示一种图像的概念,但是它们又不全是图片,通过颜色也可以构造处各式各样的图像的效果。Drawable一般是通过XML来定义的,当然我们也可以通过代码来创建具体的Drawable对象,只是用代码创建会稍显复杂。Drawable的内部宽/高这个参数比较重要,通过getIntrinsi

2020-08-13 16:05:15 294

原创 Android动画深入分析

文章目录Android动画深入分析1. View动画1.1 View动画的种类1.1.1\标签1.1.2 \标签1.1.3 \标签1.1.4 \标签1.1.5 \标签1.1.6 帧动画1.2 View动画的特殊使用场景1.2.1 LayoutAnimation1.2.2 Activity切换效果2. 属性动画2.1 使用属性动画2.2 理解插值器和估值器2.3 属性动画的监听器2.4 对任意属性做动画Android动画深入分析Android的动画分为三类:View动画,帧动画,属性动画。1. View

2020-08-13 16:00:28 476

原创 BaseAdapter -- convertView回收机制与动态控件响应

BaseAdapter – convertView回收机制与动态控件响应一,ConvertView回收机制工作原理:ListView针对List中每个item,要求adapter“给我一个试图”(getView)一个新试图被返回并显示Android为此缓存了视图,Android有一个叫做Recycler的构件,下图是它的工作原理。ListView先请求一个item1视图(getView)并且请求其他屏幕可见的视图,此时convertView是空(null)。当item1滚出屏幕,并且一个

2020-08-04 10:20:59 248

原创 Java设计模式-Builder模式

Java设计模式-Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。应用场景:相同的方法,不同的执行顺序,产生不同的事件结果时多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时Buider模式的简单实现public abstract class Computer { protected Strin

2020-07-28 09:55:58 160

原创 Java设计模式-单例模式

Java设计模式-单例模式定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。应用场景:确保某个类只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有一个。例如,创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源。实现单例模式的关键点:构造函数不对外开放,一般为private通过一个静态方法或者枚举返回单例类对象确保单例类的对象有且只有一个,尤其是在多线程的环境下确保单例类对象在反序列化时不会重新构建对象单例模式的简单示例//普

2020-07-28 09:55:12 169

原创 Java泛型(1)

Java泛型(1)1. 泛型的定义以及存在的意义泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数;此时类型也定义成参数形式(可以称之为类型形参),然后在使用时传入具体的类型(类型实参)。一些常用的泛型类型变量:E:元素(Element),多用于Java集合框架K:关键字(Key)N:数字(Number)T:类型(Type)V:值(Value)2. 泛型类的使用public class GenericClass<T> { priv

2020-06-26 14:33:18 301

原创 Handler源码分析

Handler源码分析Handler的主要使用场景是子线程完成耗时操作的过程中,通过Handler向主线程中发送消息Message,用来刷新UI界面。从new Handler()开始在无参构造函数里面调用了重载的构造方法并分别传入null和false。并且在构造方法中给两个全局变量赋值:mLooper和mQueue。这两者都是通过Looper来获取,具体代码如下:可以看出,myLooper通过一个线程本地变量中的存根,然后mQueue是Looper中的一个全局变量,类型是MessageQueu

2020-06-09 22:48:57 297

原创 Android 如何自定义View?

Android 如何自定义View?在看这篇博客之前可以先看View的工作原理文章目录Android 如何自定义View?1. 自定义View1. 自定义View的分类1. 继承View重写onDraw方法2. 继承ViewGroup派生特殊的Layout3. 继承特定的View4. 继承特定的ViewGroup2. 自定义View须知1. 让View支持wrap_content2. 如果有必要,让View支持padding3. 尽量不要在View中使用Handler,没必要4. View中如果有线程或

2020-05-24 19:24:05 1220 1

原创 View的工作原理

View的工作原理文章目录View的工作原理1. 初识ViewRoot 和 DecorView2. 理解MeasureSpec1. MeasureSpec2. MeasureSpec和LayoutParams的对应关系3. View的工作流程1. measure过程1. View的measure过程2. ViewGroup的measure过程2. layout过程3. draw过程1. 初识ViewRoot 和 DecorViewViewRootViewRoot对应于ViewRootImpl类,它是

2020-05-22 00:36:50 210

原创 彻底掌握Android touch事件分发顺序

彻底掌握Android touch事件分发顺序Android touch事件的分发主要由几个方向可以展开深入分析:touch事件是如何从驱动层传递给Framework层的InputManagerService;WMS是如何通过ViewRootImpl将事件传递到目标窗口;touch事件到达DecorView后,是如何一步步传递到内部的子View中。其中与上层软件开发息息相关的就是第三条。思路梳理在深入分析事件分发源码之前,需要先弄清楚2个概念。ViewGroupViewGroup是一组

2020-05-09 21:12:58 599

原创 Class对象在执行引擎中的初始化过程

文章目录Class对象在执行引擎中的初始化过程1. 装载什么是装载加载时机2.链接验证准备解析3.初始化初始化时机初始化类变量被动引用Class对象在执行引擎中的初始化过程一个class文件被加载到内存中需要经过三大步:装载,链接,初始化。其中链接又可以细分为:验证,准备,解析三小步。用一张图来描述class文件加载到内存的步骤如下:1. 装载什么是装载装载是指Java虚拟机查找.cl...

2020-05-01 11:46:52 666

原创 ClassLoader 的加载机制

ClassLoader 的加载机制1. Java中的类何时被加载器加载在Java程序启动的时候,并不会一次性加载程序中所有的.class文件,而是在程序运行过程中,动态的加载相应的类到内存中。通常情况下,Java程序中的.class文件会在以下两种情况下被ClassLoader主动加载到内存中:调用类构造器调用类中的静态(static)变量或者静态方法2. Java中的ClassL...

2020-04-21 20:03:45 459

原创 字节码层面分析class类文件结构

字节码层面分析class类文件结构1. 思考:Java中的String字符串的长度有限制吗?平时项目的开发中,我们经常会用到String来声明字符串,比如String str = ”abc“,但是你可能从来没有想过等于号之后的字符串常量到底有没有长度限制。要彻底答对这道题,就需要了解-class文件。2. class 的来龙去脉Java能够实现”一次编译,到处运行“,这其中class文件要...

2020-04-09 00:45:28 277

原创 JVM虚拟机-GC 回收机制与分代回收策略

JVM虚拟机-GC 回收机制与分代回收策略垃圾回收(Garbage Collection,简写为GC)Java语言开发者比C语言开发者幸福的地方就在于,我们不需要手动释放对象的内存,JVM中的垃圾回收器(Garbage Collector)会为我们自动回收。但是这种幸福是有代价的:一旦这种自动化机制出错,我们又不得不深入理解GC回收机制,甚至需要对这些“自动化”的技术实施必要的监控和调节。J...

2020-04-06 21:40:32 322

原创 JVM虚拟机-内存分布

JVM虚拟机-内存分布1.内存区域划分Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为不同的数据区域。下面一张图描述了一个HelloWorld.java文件被JVM加载到内存中的过程。a. HelloWorld.java文件首先需要经过编译器编译,生成HelloWorld.class字节码文件b. Java程序中访问HelloWorld这个类时,需要通过ClassLoad...

2020-04-03 21:41:11 344

原创 Android Jetpack-Lifecycle

Android Jetpack-Lifecycle为什么要使用Lifecycle?Activity和Fragment是有生命周期的,有时候,我们的很多操作需要写在生命周期的方法中,比如,下载,文件操作等,这样很多情况下会导致,我们在Activity的生命周期方法中写越来越多的代码,Activity或者Fragment越来越臃肿,代码维护越来越困难。使用Lifecycle就可以很好的解决这类问...

2020-02-15 17:44:08 277

原创 AndroidIPC-AIDL

AndroidIPC-AIDL一、概述AIDL意思即Android Interface Definition Language,翻译过来就是android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。从某种意义上说AIDL其实是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而是据此生成的一个Interface的实例代码,AIDL其实是...

2020-02-09 12:16:03 146

原创 Android Jetpack-Navigation

Android Jetpack-Navigation(一)1. 简介Navigation是一个可简化Android导航的库和插件。Navigation是用来管理Fragment的切换,并且可以通过可视化的方式,看见App的交互流程。2. 优点处理Fragment的切换默认情况下正确处理Fragment的前进和后退为过渡和动画提供标准化的资源实现和处理深层连接可以绑定 Toolb...

2020-02-09 12:10:34 547

原创 Retrofit(一)

Retrofit(一)一. Retrofit介绍Retrofit基于Okhttp封装的网络请求框架,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责网络请求接口的封装.二. Retrofit简单使用请求百度URL1. 添加依赖 implementation 'com.squareup.retrofit2:retrofit:2.2.0' implemen...

2020-02-09 12:04:28 1477 1

原创 DataBinding(二)

DataBinding(二)1. 列表绑定以RecyclerView为例,主要变化在子项布局和适配器。1. 将子项布局改为DataBinding布局public class Dishes { private String imgAdress; private String name; public Dishes(String imgAdress, String ...

2020-02-01 19:17:39 204

原创 View的事件体系——View的事件分发机制

View的时间体系——View的事件分发机制1. 什么是事件分发?通过手指对屏幕的触摸来完成整个交互过程用户通过屏幕与手机交互的时候,每点击一次,长按,移动等都是一个事件事件分发机制:某一个事件从屏幕传递到各个View,由View来使用这一事件(消费事件)或者忽略这一事件(不消费事件),这整个过程的控制。2. 事件分发的对象系统把事件封装为MotionEvent对象,事件分发的过...

2020-02-01 14:09:15 308

原创 View的事件体系(一)

View的事件体系(一)1. View的基础知识1. 什么是ViewView是Android中所有控件的基类,不管是简单的Button和TextView还是复杂的RelativeLayout和ListView他们的共同基类还是View。2. View的位置参数View的位置主要由它的四个顶点来决定,分别对应View的四个属性:top,left,right,bottom,其中top是左上角...

2020-02-01 14:06:08 184

原创 DataBinding(一)

DataBinding(一)准备再Module下的build.gradle中添加如下:android{ dataBinding{ enabled = true }}1. 基础在布局文件中,选中跟布局的ViewGroup,按住alt+回车键,点击“Convert to data binding layout”由一个layout标签将原布局包裹,data...

2020-01-19 10:11:16 136

原创 Android屏幕适配

屏幕尺寸屏幕尺寸指屏幕的对角线长度,单位是英寸,一英寸等于2.54厘米。屏幕分辨率屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点,一般以纵向像素横向像素,如19601080屏幕像素密度在尺寸相同的情况下,分辨率越高,屏幕越清晰,屏幕像素密度越大。屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。屏幕像素密度与屏幕尺寸和屏幕分辨...

2020-01-19 10:09:54 246

原创 DataBinding(一)

DataBinding(一)准备再Module下的build.gradle中添加如下:android{ dataBinding{ enabled = true }}1. 基础在布局文件中,选中跟布局的ViewGroup,按住alt+回车键,点击“Convert to data binding layout”由一个layout标签将原布局包裹,data...

2020-01-19 10:08:46 170

原创 Android Material(一)

Android Material(一)1. MaterialTextFieldimplementation 'com.google.android.material:material:1.1.0-alpha09'1. 默认效果<com.google.android.material.textfield.TextInputLayout android:layout_wi...

2020-01-19 10:07:54 978

原创 EventBus

EventBus是一种用于Android的事件发布-订阅总线。事件:普通的Java对象,可以携带数据。订阅:在订阅方订阅。发布:在发布方将事件发布出来。注册在订阅方进行注册,一般在onStart方法进行注册。EventBus.getDafault().register(this);取消注册在订阅方取消注册,一般在onStop方法EventBus.getDefault()....

2019-12-08 10:28:53 194

原创 Glide

GlideAndroid加载图片种类资源文件中的图片手机SD卡中的图片网络中的图片加载图片的步骤图片的地址->把图片转换为可被加载的对象->通过图片加载控件显示原生代码加载网络图片通过网络请求获得输入流Bitmap bitmap = BitmapFactory.decodeStream(Inputstream);通过输入流转化为可被加载的对象注意:当加载过大...

2019-12-08 10:26:34 165

原创 Android9.0 网络安全配置文件

Android9.0 网络安全配置文件在Android9.0版本中,对网络安全有较高的要求,如果访问的是 https 协议则不受影响;而如果你访问了 http 协议的网址,还需要添加安全配置文件,步骤如下:1. 创建安全配置文件手动在res目录下创建xml目录,在此目录下新建 network_security_config.xml文件,内容如下<?xml version = "1.0...

2019-11-30 22:54:03 1304

原创 线程池

线程池线程池简介线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程线程池都保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线...

2019-11-30 22:52:50 147

原创 ViewPager+Fragment实现简单页面切换

ViewPager+Fragment实现简单页面切换1.效果2.demo大概组成3.步骤1.在activity_main.xml中添加ViewPager<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:a...

2019-10-10 23:34:09 1480 1

原创 Android多线程编程

Android多线程编程1.异步消息处理机制(Handler)我们都知道Android更新ui不允许在子线程中进行,对此,Android提供了一套异步消息处理机制<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent...

2019-10-06 22:23:36 115

原创 Material Design(2)

Material Design(2)1.卡片式布局1.CardViewCardView也是一个FrameLayout,只是额外增加了圆角和阴影等效果,看上去会有立体的效果。接下来我们将结合RecyclerView来实现一个高配版的水果列表效果(其实只需要在RecyclerView的子布局中使用CardView)1.添加依赖implementation ‘com.android.supp...

2019-10-06 13:57:14 234

原创 Material Design(ToolBar,滑动窗口,悬浮按钮和可交互提示)

1.Toolbar系统原生的ActionBar由于其设计原因,被限定只能位于活动的顶部。Toolbar的强大之处在于,它不仅继承了ActionBar的所有功能,而且灵活性很高。首先我们都知道,任何一个新建的项目,默认都会显示ActionBar的,这是根据项目中指定的主题来显示的。打开AndroidManifest.xml<application android:allowBac...

2019-09-29 13:00:28 568

原创 Android【网络技术】

文章目录Android 网络技术1. WebView的用法在应用程序中加载和显示网页2. 使用http协议访问网络1. 使用HttpURLConnection示例提交数据给服务器2. 使用OkHttp示例(xml文件不需要改动)提交数据给服务器3. 解析XML格式数据1. 搭建简单的web服务器2. 开始Pull解析方式SAX解析4. 解析JSON格式数据Android 网络技术1. WebV...

2019-08-14 21:48:24 559

空空如也

空空如也

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

TA关注的人

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