9月 07 2020
Categories: Tags:

Glide123Glide.with(context) .load(myUrl) .into(imageView); 生命周期 ...

9月 07 2020
Categories: Tags:

OkHttp是对 Socket 的封装。URLConnection 在4.4以后底层也使用了 OkHttp。 Android源码中 /external/okhttp/jarjar-rules.txt 中表示com.squareup开关的包会在编译时打包成com.android开头的包。 12rule com.squareup.** com.android.@1rule okio.** com.android.okio.@1 ...

9月 07 2020
Categories: Tags:

LeakCanary使用添加依赖(release有no-op版)然后在 Application 初始化。 123456dependencies { ...

9月 07 2020
Categories: Tags:

LRU最近最少使用算法。 基本原理 -要求查找快,插入快,删除快,有顺序之分。哈希表查找快,但是数据无固定顺序;链表有顺序之分,插入删除快,但是查找慢。所以结合一下,形成一种新的数据结构:哈希链表。 按顺序插入 ,所以需要双向链表。 LinkedHashMap,使用 accessOrder=true 基于顺序访问,元素访问后被移动到末尾。 自己动手实现LRU12... ...

9月 07 2020
Categories: Tags:

记录一次Android7.0适配FileProvider踩坑 FileProvider重复 自定义FileProvider继承FileProvider。 12public class AppleFileProvider extends FileProvider {} AndroidManifest.xml中a... ...

4月 18 2020
Categories: Android Tags: ,

优雅FindViewByIdfindBiewById 是 Android 开发中在布局中查找 View 元素的 Api。 12345678910 ...

3月 20 2020

万丈高楼平地起重拾基础,备忘备战~ 算法总结-VAlgorithm -> LookUp 设计模式-VDesignPatterns -> LookUp Android知识- ...

3月 05 2020
Categories: Android Tags: ,

1234567891011121314151617... ...

1月 11 2020

ViewPager下Fragment预加载与懒加载预加载ViewPager 控件有一个预加载机制,即默认情况下当前页面左右两侧的1个页面会被预加载,以方便用户滑动切换到相邻的界面时,更流畅地加载界面(节省了初始化时间)。 从源码里可以看到,ViewPager 的预加载机制是不可取消的,预加载数量 limit 至少为 1,如果外部设置小于 1,内部会自动置为 1。 1234 ...

1月 06 2020
Categories: 设计模式 Tags: ,

设计模式总结阅读《大话设计模式》和《Android源码解析与实战》第2版时,进行的简单整理和总结,现已上传至Github上。 Github Github 项目地址 直接浏览地址 ...

10月 16 2019
Categories: Android Tags: , ,

简析Bitmap基于9.0(29)简析Bitmap类。 我们只关注Bitmap类暴露出来的(即访问权限为public)东西。 枚举类Config 枚举类CompressFormat 若干 createBitmap 静态方法 其他方法 枚举类Config可能的 bitmap 配置。bitmap 配置描述像素的存储方式。这会影响质量(颜色深度)以及显示透明/半透明颜色的能力。 Config 每个像素占用字节数 表示颜色种数 说明 ALPHA_8 1个字节,A分量占8位,不存储颜色信息 0 ... ...

10月 14 2019
Categories: Android Tags: , ,

简析BitmapFactory基于9.0(29)简析BitmapFactory类。 我们只关注BitmapFactor类暴露出来的(即访问权限为public)东西。 静态内部类Options 若干decode方法 静态内部类OptionsOptions,顾名思义,是BitmapFactory用于decode方法的选项参数。让我们看看有哪些: Bitmap inBitmap如果使用此参数,decode方法会在加载内容时尝试重用此 bitmap ,如果编码操作不能使用此 bitma... ...

10月 14 2019
Categories: Android Tags: , ,

Android图片压缩为什么要压缩减少内存占用内存占用大小 = Bitmap大小 = 总像素点数 x 一个像素点占用的字节数 BitmapAndroid中图片在内存中的表达形式是Bitmap,即位图。 总像素点数总像素点数由什么决定呢? 总像素点数 = 图片源长度 x 缩放比例 x ... ...

10月 09 2019
Categories: 模板 Tags: , ,

上传仓库我们在日常打aar包和jar包,并上传到远端中央仓库时,需要引入大段gradle代码,较为繁琐。我这里整理了常用的上传到中央仓库的gradle代码,提供了较为方便的使用方式。上传代码模板GitHub目前只有上传到bintray也就是jcenter的整理,后期有需要其他远端中央仓库的会继续跟进。 模板整理GitHub ...

10月 09 2019
Categories: 模板 Tags: , ,

Travis-CI官方文档 免费Travis-CI(针对开源项目):https://travis-ci.org 收费Travis-CI(针对私有和商业项目):https://travis-ci.com 使用步骤 登录 Travis CI 并对指定的项目启用。 配置 .travis.yml ,参考官方文档。 push(或其他方式)触发Travis-CI。 ...

9月 25 2019
Categories: Android Tags: ,

TimeoutException产生原因与 GC 过程相关的守护线程中的2个守护线程 FinalizerDaemon 和 FinalizerWatchdogDaemon 有关。 FinalizerDaemon :析构守护线程。对于重写了成员函数 finalize 的对象,它们被 GC 决定回收时,并没有马上被回收,而是被放入到一个队列中,等待 FinalizerDaemon 守护线程去调用它们的成员函数 finalize ,然后再被回收。 FinalizerWatchdogDaemon :析构监护守护线程。用来监控 FinalizerDaemon 线程的执行。一旦检测那些重定了成员函数 finalize 的对象在执行成员函数 finalize 时超出一定的时间,那么就会退出 VM 。 原因小总结: GC 过程中 FinalizerDae... ...

9月 16 2019
Categories: Android Tags: ,

Android动画Android中动画划分为两大类 视图动画(View Animation)和 属性动画(Property Animation)。其中 属性动画(Property Animation)需要在Android3.0之后(API >= 11)使用。视图动画(View Animation)又包括了 帧动画(Frame Animation) 和 补间动画(Tweened Animation)。 视图动画(View Animation)帧动画(Frame Animation)帧动画(Frame Anim... ...

9月 16 2019
Categories: Android Tags: ,

Android自定义View什么是自定义View自定义 View 就是通过继承 View 或者 View 的子类,并在继承的类里面实现自定义的处理逻辑(重写相应的方法),以达到自己想要的效果。 为什么要自定义View 让界面有特定的显示效果、交互 优化布局(减少布局层次) 封装 如何自定义View ...

9月 10 2019
Categories: Java Tags: ,

Java泛型概述泛型:参数化类型(将类型由原来的具体的类型参数化)。 特点: 适用于多种数据类型执行相同的代码。 使用泛型时,在实际使用之前类型就已经确定了,不需要强制类型转换。 泛型只在编译阶段有效。 泛型命名标识字母(常见字母): T Type K V Key Value E Element 简单使用泛型类 ...

8月 28 2019
Categories: Android Tags: ,

Android设备唯一性如何标识唯一的Android设备呢? 硬件标识符IMEI 国际移动设备身份码(International Mobile Equipment Identity),是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。 IMEI所需权限: 1<uses-permission android:name=&quo... ...

8月 27 2019
Categories: Android Tags: ,

Android应用唯一性说到应用唯一性,下面三个关键词,有何区别和联系呢? 包名 applicationId 签名 包名定义简介包名指的是软件包名称(代码命名空间)。就是我们平常写代码import的package。 配置示例12 ...

5月 06 2019
Categories: Android Tags: , ,

Android存储目录幻想曲 问:三个概念,你弄清楚了吗?内存:Memory内部存储:InternalStorage外部存储:ExternalStorage 答:说到这三个概念,就不得不说一下平时我们选购手机的参数6G+128G、8G+256G等,这里的6G和8G指的是手机内存(手机运行时存储),而128G和256G指的是手机存储空间(由内部存储的空间和外部存储的空间构成)。PS:所以如果追求手机的运行速度,内存买大一点。可以理解为手机内存是操场,而手机存储空间是教室,要想学生们跑得快自然操场得大一些,教室的大小只决定了可以容纳多少学生。 你了解Android手机的存储目录吗? 你知道Android手机App应用数据都存放在哪了吗? 你知道Android手机存储存在的隐私安全问题吗? 那么开始今天的故事。 ...

4月 21 2019
Categories: 数据结构 Tags: , ,

Android特有集合类浅析 ArrayMap ArraySet SparseArray SparseIntArray SparseBooleanArray SparseLongArray 设计这些Android特有的集合类的意义为什么要设计这些Android特有的集合类呢? 主要目的: 优化内存占用。在移动设备端内存资源很珍贵,Java原本的集合类为实现快速查询带来了很大内存的浪费。 ArrayMap ...

2月 22 2019
Categories: 二维码 Tags:

一、引言上次我们讲到二维码比条形码更优秀,可以承载更多信息等;也讲到了我们平常所说的二维码是QR Code,是狭义的二维码。后文所说的二维码除特殊说明外,也都指的是QR码。忘了的同学或者没看过上一篇的同学可以点这里。 这个界面想必大家都很熟悉,那么扫二维码的这一过程到底发生了什么呢,作为社交和移动支付“宠儿”的二维码是如何与世浮沉的呢,今天我们来了解一下。 二、二维码识别基本过程 ...

2月 22 2019
Categories: 二维码 Tags:

一、引言二维码在如今的生活中随处可见,移动支付、社交App等都可以见到二维码的身影。今天我们就来了解一下二维码。 二维码足迹 二维码足迹 ...

2月 11 2017

一、模式概述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。 UML图: 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的... ...

12月 11 2016
Categories: Android Tags: ,

一、定义与声明在资源文件夹values下新建attr.xml文件 12345678910111213 ...

12月 10 2016
Categories: Android Tags: ,

一、简述  View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局、绘制。measure确定View的测量宽高;layout确定View的最终宽高和四个顶点的位置;draw则将View绘制到屏幕上。 二、measure过程1. View的measure过程 由measure()方法来完成,measure()方法是final类型的方法,因此不能被重写。而measure方法会去调用onMeasure()方法,因此只需要看onMeasure()的实现即可。具体可以参看上一节相关内容。 ...

12月 09 2016
Categories: Android Tags: ,

一、简述 自定义View是Android进阶之路不可避免的难关。此刻下定决心攻克这个难关,以此为证。在学习绘制自定义View之前先来思考一下系统是如何绘制出这些View的。 推荐《Android群英传》、《Android开发艺术探索》这两本书,本系列文中很多都来源于这两本的阐述。 二、View的测量 设想这么一个游戏:一个人蒙着眼睛,另一个人通过说话来指示蒙着眼睛的人去画他想画图案。比如你会指导他在画板左上角水平竖直都为10厘米处开始画一个边长为10厘米的正方形,那么他大致就能画准确。而如果你只告诉他画一个矩形,那么他就画不准确了。事实上,Android就是那个蒙着眼睛的人,我们需要细致地高速他怎么绘制。 生活中,画一个图形必须知道他的大小和位置。同样,Android系统在绘制View前也必须对View进行测量,即告诉系统该画一个多大的View,这个过程在onMeasure()方法中进行。  Android系统为我们... ...

11月 22 2016

一、模式概述:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象爱,使他们能够自动更新自己。 UML图: 二、模式优缺点: ...

10月 12 2016

一、模式概述:在不破坏封装性的前提下,捕获一个对象的内部状态,并在改对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。UML图:Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以... ...

10月 11 2016

一、模式概述:将一个类的接口转换成客户希望的另外一个接口。适配器的意思就是使得一个东西适合另一个东西的东西。如,不同国家有不同标准的电压(110V、220V),于是就需要电源适配器。 UML图:Target:客户所期待的接口。(目标可以是具体的或抽象的类,也可以是接口)Adaptee:需要适配的类。Adapter:适配器类。(通过在内部包装一个Adaptee对象,把源接口转换成目标接口)Client:客户端。 ... ...

10月 10 2016

一、模式概述:在很多情况下,一个对象的行为取决于它的一个或多个变化的属性,这些属性我们称之为状态,这个对象称之为状态对象。对于状态对象而言,它的行为依赖于它的状态。这样的一个对象,当它在于外部事件产生互动的时候,其内部状态就会发生改变,从而使得他的行为也随之发生改变** 所谓状态模式就是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。** 没图说个文明你我他。 UML图: ...

3月 10 2016

一、模式概述:提供一个创建一系列相关或互相依赖的接口,而无需指定它们具体的类。 先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。 UML图: 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来... ...

1月 22 2016

一、模式概述:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 UML图: 工厂(Creator)角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。 抽象产品(Product)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色:是简单工厂模式的创建目标,所有创建的对象都... ...