11月 25 2020
Categories: Tags:

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

11月 25 2020
Categories: Tags:

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

11月 25 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 ...

11月 25 2020
Categories: Tags:

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

11月 24 2020
Categories: Android Tags: , ,

哈喽,Android 小伙伴们~ 这篇文章将提到 Fragment 中的两种 lifecycleowners。因为作为一个 Android 开发者,我们能够简单地使用 Fragment 作为 lifecycle owner,但某些情境下这可能会使你烦恼。 让我们先来看一下 Fragment 的生命周期: 从图中我们可以看到 onCreate 和 onDestroy 只调用了一次。这些是 Fragment 的主要的生命周期方法。 onCreateView 和 onDestroyView 根据 Fragment 的状态来被调用,因为它们是 Fragment 中 View 的主要生命周期方法。 因此,如果我们在 onCreate 中绑定 LiveData ,仅仅注册一次似乎是很合适很健康的。 1... ...

4月 18 2020
Categories: Android Tags: ,

findBiewByIdfindBiewById 是 Android 开发中在布局中查找 View 元素的 Api。 findBiewById 基本使用12345678 ...

3月 20 2020

重拾基础,备忘备战~ 算法总结-VAlgorithm -> LookUp 设计模式-VDesignPatterns -> LookUp Android知识-VAndroidReview -> ...

3月 05 2020
Categories: Android Tags: ,

1234567891011121314151617... ...

1月 11 2020

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

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

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

11月 16 2019
Categories: Android Tags: ,

FileProvider重复 自定义FileProvider继承FileProvider。 12public class AppleFileProvider extends FileProvider {} AndroidManifest.xml中application节点下添加provider节点。 Provider1 ...

10月 16 2019
Categories: Android Tags: , ,

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

10月 14 2019
Categories: Android Tags: , ,

基于9.0(29)简析BitmapFactory类。 我们只关注BitmapFactor类暴露出来的(即访问权限为public)东西。 静态内部类Options 若干decode方法 静态内部类OptionsOptions,顾名思义,是BitmapFactory用于decode方法的选项参数。让我们看看有哪些: Bitmap inBitmap如果使用此参数,decode方法会在加载内容时尝试重用此 bitmap ,如果编码操作不能使用此 bitmap (有限制条件),则会抛出 java.lang.IllegalArgumentException 异常。当前的重用实现方式要求 bitmap 必须是可变的,并且即使一个资源在decode后通常会得到不可变的 bitmap,在重用成功后所... ...

10月 14 2019
Categories: Android Tags: , ,

为什么要压缩减少内存占用内存占用大小 = Bitmap大小 = 总像素点数 x 一个像素点占用的字节数 BitmapAndroid中图片在内存中的表达形式是Bitmap,即位图。 总像素点数总像素点数由什么决定呢? 总像素点数 = 图片源长度 x 缩放比例 x 图片源宽度 x 缩放比例 缩放比例可以大致表示为:(为什么说大致呢?因为不是绝对的,实际还有其他因素可以影响实际缩放比例,如inScreenDensity)缩放比例 = 1/inSam... ...

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

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

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

官方文档 免费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: ,

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

9月 16 2019
Categories: Android Tags: ,

Android中动画划分为两大类 视图动画(View Animation)和 属性动画(Property Animation)。其中 属性动画(Property Animation)需要在Android3.0之后(API >= 11)使用。视图动画(View Animation)又包括了 帧动画(Frame Animation) 和 补间动画(Tweened Animation)。 视图动画(View Animation)帧动画(Frame Animation)帧动画(Frame Animation) 有时也叫 Drawable动画,这种动画的实质其实是Drawable。像播放幻灯片一样,利用视觉残留产生动画效果。 核心类:AnimationDrawable ...

9月 16 2019
Categories: Android Tags: ,

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

9月 10 2019
Categories: Java Tags: ,

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

8月 28 2019
Categories: Android Tags: ,

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

8月 27 2019
Categories: Android Tags: ,

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

5月 06 2019
Categories: Android Tags: , ,

问:三个概念,你弄清楚了吗?内存:Memory内部存储:InternalStorage外部存储:ExternalStorage 答:说到这三个概念,就不得不说一下平时我们选购手机的参数6G+128G、8G+256G等,这里的6G和8G指的是手机内存(手机运行时存储),而128G和256G指的是手机存储空间(由内部存储的空间和外部存储的空间构成)。PS:所以如果追求手机的运行速度,内存买大一点。可以理解为手机内存是操场,而手机存储空间是教室,要想学生们跑得快自然操场得大一些,教室的大小只决定了可以容纳多少学生。 你了解Android手机的存储目录吗? 你知道Android手机App应用数据都存放在哪了吗? 你知道Android手机存储存在的隐私安全问题吗? 那么开始今天的故事。 虚拟世界Android存储目录的化身——A州M社区。 众所周知,A州是一座正在蓬勃发展的城市。M社区是A州引以为傲的设施完备的高档社区(各家... ...

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

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

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)角色:是简单工厂模式的创建目标,所有创建的对象都... ...