- 博客(24)
- 资源 (7)
- 收藏
- 关注
原创 面试官:怎么实现一个自定义View?
文章目录前提自定义View的方式方式1: 继承系统UI控件1 添加布局2 添加自定义属性3 TitleBar代码实现方式2: 继承View / ViewGroup1 重写onMeasure为什么我们需要重写onMeasure?MesureSpec测量模式自定义FlowLayout onMeasure方法说明(看注释 !看助手!看注释!)2 重写onDraw3 重写onLayout自定义FlowLayout onLayout方法说明(看注释 !看注释!看注释!)效果图如下FlowLayout完成代码前提为
2020-11-11 16:06:01
719
原创 十分钟复习Bitmap
文章目录1 屏幕尺寸、分辨率、dpi、px、dp、sp都是什么,它们换算关系是怎么样的?1.1 屏幕尺寸1.2 屏幕分辨率1.3 dpi1.4 屏幕尺寸、分辨率、dpi换算关系1.5 密度无关单位 dp、sp1.6 dp、px、dpi[换算关系](https://developer.android.com/training/multiscreen/screendensities#dips-pels)2 Bitmap内存占用2.1 内存计算公式2.1.1 单个像素的字节大小2.1.2 公式为什么是约等于2.1
2020-11-05 22:33:09
738
原创 LeakCanary 1.3版本源码分析
为什么是1.3版本呢,是因为之前看过的源码,有几点没说明白的,补充一下。如有错误,还请指出来。谢谢基本使用在build.gradle中: dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3' releaseCompile 'com.squareup.leakcanary:lea...
2019-09-17 23:12:00
193
原创 AsyncTask源码解析
特点及注意事项AsyncTask类必须在主线程中加载。在4.1后,在ActivityThread的main方法中系统会调用AsyncTask的init,用于在主线程中加载该类。AsyncTask的对象必须在主线程中创建。execute必须在主线程。一个AsyncTask对象只能执行一次,即只能调用一次execute方法。3.0以前,最大支持128个线程的并发,10个任务的等待。在3.0...
2019-09-17 21:30:04
159
原创 关于Http你至少需要知道这些内容
本文包含内容Http特点一次完整的网络访问流程URI和URL的区别Http报文结构,首部字段说明Http的请求方法Http状态码Cookie和Session分别干嘛的Http和Https的关系Https建立SSL全过程Http1.0、1.1、SPDY、2.0的区别Http Post传输数据几种格式Http特点1. 支持c/s模式Http用于客户端和服务端之间通信...
2019-09-16 23:45:00
273
原创 Activity启动模式几点需要注意的问题
本文包含内容4中启动模式基本介绍项目中应用场景TaskAffinity注意事项面试中被问的几个问题启动模式standard标准启动模式,系统默认模式每次启动会创建一个新实例,不管这个实例是否存在谁启动了这个Activity,那么Activity就运行在启动这个Activity的Activity所在的栈中如果Activity的启动模式是SingleInstance &a...
2019-09-15 20:36:38
264
原创 LruCache源码解析
本文包含内容LruCache源码解析 构造方法、增、删、改、查如何实现Lru的1. 构造方法public LruCache(int maxSize) { // maxsize不允许<0 建议使用Runtime.getRuntime().maxMemory() / 8 if (maxSize <= 0) { throw new IllegalArgu...
2019-09-15 14:48:08
150
原创 LinkedHashMap jdk1.8源码解析
1. 特点继承HashMapEntry继承HashMap的Node static class Entry<K, V> extends HashMap.Node<K, V> { Entry<K, V> before, after; Entry(int hash, K key, V value, Node<K, V...
2019-09-15 12:54:46
270
原创 LinkedList 特点及增删改查源码解析
特点双向链表存储数据查询慢、增删除快1.构造方法public LinkedList() {}public LinkedList(Collection<? extends E> c) { this(); // 调用addAll 详见2.4 addAll(c);}1.1 双向链表Nodeprivate static class Node<E...
2019-09-10 15:59:03
350
原创 ArrayList 特点+源码分析记录
包含内容特点增删改查源码分析特点按照插入顺序来保存元素,可以利用下标来查找值按照下标访问元素最快O(1)在中间插入元素很慢 & 删除元素很慢允许数据null线程不安全底层是数组,默认数组长度为10,扩容先进行1.5倍扩容,不够直接使用需要长度为容量####1. 构造方法public ArrayList(int initialCapacity) { // 根据...
2019-09-10 15:12:04
129
原创 HashMap jdk1.8 源码解析
本文涵盖内容HashMap 方法源码解析(构造方法、增删改查)HashMap特点、适用场景常见面试题特点,适用场景线程不安全的存储结构是 数组 + 链表 + 红黑树(jdk1.8)允许key、value为null无序源码解析1. 构造方法public HashMap(int initialCapacity, float loadFactor) { if (in...
2019-09-05 22:32:12
104
原创 Java中小小取反操作符~引发的“血”案
“血”案…记录下java中的取反操作符~是如何运算的.要了解的理论在Java中,所有数据的表示方式都是以补码形式来表示正数:符号为0 , 原码、反码、补码相同负数:符号位为1补码 = 反码 + 1实战取反流程步骤解析 :先表示出当前数值的补码求出该值的原码进行取反操作得到答案的原码将答案原码转成补码即可举例说明 :~4 = -5 过程分析表示出4的补码4...
2019-09-02 21:35:49
139
原创 HashMap1.8源码梳理
本文涵盖内容HashMap 方法源码解析(构造方法、增删改查等方法)HashMap特点、适用场景常见面试题考点特点,适用场景线程不安全的存储结构是 数组 + 链表 + 红黑树(jdk1.8)允许key、value为null无序源码解析1. 构造方法public HashMap(int initialCapacity, float loadFactor) { i...
2019-09-02 21:34:23
176
原创 ClassLoader ,了解一下
ClassLoader 类图:Android中ClassLoader的介绍ClassLoader介绍:ClassLoader是一个抽象类,其中定义了ClassLoader的主要功能。包括类加载,验证,卸载等构造方法:public abstract class ClassLoader { private ClassLoader parent; pr...
2018-06-11 17:15:35
184
原创 Android中的.so,了解一下
为什么要使用.soso机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快so内存分配不受Dalivik/ART的单个应用限制,减少OOM相对于java代码,二进制代码的反编译难度更大,一些核心代码可以考虑放在so中如何使用.so在Android Stu...
2018-06-04 23:37:46
898
原创 开发Bug全记录——java.lang.VerifyError
如何遇到这个问题基于种种原因在打包之后要拆开再进行smali,再打包的过程中遇到了这个问题,而且在ART虚拟机下面不会报错,在Dalvik虚拟机下会出现报错,很强势。为什么会出现这个问题Java虚拟机编译的时候,”校验器”检测到一个类文件虽然格式正确,但包含着一些内部不一致性或安全性问题时,抛出该错误校验器会检查这个类的构造是否符合jvm的字节码规范,不同虚拟机可能在检查的时候...
2018-05-29 19:04:30
5673
原创 Git常用命令--了解这些就够了
将本地工程push到远程方式一:建立本地仓库 git init创建远程仓库:在github或者gitlab创建远程仓库让本地仓库和远程仓库进行关联git remote add origin git@mycode.skylettestudio.com:xlPay/XLPay.git进行添加和提交操作git add .git commit -m"添加文件"pu...
2018-05-16 22:47:57
290
原创 Android混淆——了解这些就够了
混淆介绍Proguard是一个Java类文件压缩器、优化器、混淆器、预校验器。压缩环节会检测以及移除没有用到的类、字段、方法以及属性。优化环节会分析以及优化方法的字节码。混淆环节会用无意义的短变量去重命名类、变量、方法。这些步骤让代码更精简,更高效,也更难被逆向(破解)。混淆后默认会在工程目录app/build/outputs/mapping/release(debug)下生成一个mapp...
2018-05-03 18:33:50
553
原创 Apk根据不同渠道更换SDK
需求是这样的开发者接入sdk,接入成功之后提供apk,拆包对里面的sdk内容进行更替,得以实现不同渠道接入不同的SDK内容。实现步骤拆解如下:apk接入jar包,修改jar包将jar包通过dx.jar 转化成 dex将dex通过baksmali转化成smali拆包将旧版本的jar包的smali删除,将新版本的samli添加进去打包,签名即可1. apk接入jar...
2018-04-27 17:56:09
675
原创 极速Android多渠道打包工具
说明最近项目需要对apk拆包更换依赖内容再进行打包,以及多个依赖打成jar包等操作,项目大佬写了一套python脚本,在熟悉的过程中总结了纯命令行打apk包的过程,然后结合使用python写了一个简单的多渠道打包的脚本。这么回事通过apktool把你的签名的包进行解压,然后修改AndroidManifest.xml中的meta-data的value值,再进行打包,签名的操作。...
2018-04-20 23:30:19
235
原创 IntentService的使用及源码分析
介绍Service默认是运行在UI线程的不能执行耗时任务(10s内不会anr),所以我们如果想在Service中执行耗时任务的话必须要自己初始化Thread来进行耗时操作,否则….而IntentService则是一个可以执行耗时任务的Service,因为它内部使用了HandlerThread,而HandlerThread就是一个Thread如何使用 public class My...
2018-04-14 12:17:16
177
原创 纯命令行打APK实操全记录
介绍本文基于ant命令创建工程使用android sdk提供的工具进行手动打包打包基本流程手动命令打包实操后续学习gradle打包、python脚本打包及点击build As的工作过程等图解打包过程手动打包用的工具及环境配置android.bat位于sdk的tools目录下配置环境变量:在电脑 –> 属性 –> 高级 –> 环境变...
2018-04-14 12:10:38
1116
原创 DialogFragment使用及总结
DialogFragment使用总结介绍DialogFragment在android 3.0时被引入。是一种特殊的Fragment。在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。优势在哪里使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理...
2017-09-11 16:56:22
856
原创 Android 国际化功能实现
文字:首先将string文件在values和values-en下定义两套,两套中的string命名要统一图片:定义两个图片文件夹:drawable-en-xhdpi 、默认的图片:drawable-xhdpi切换:动态切换语言如下setLanguage重新应用选择语言 使用 SharedPreferences 对选择进行存储,下次进入直接使用。如果没有选择就使用系统默认的语言各种语言什么鬼
2017-09-05 10:46:30
264
DialogFragment Demo
2017-09-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人