自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (5)
  • 收藏
  • 关注

原创 android--为什么重写hashCode()和equals(),网上太多错的了,在这里明确一遍

一、重复数据遇到的问题之前的一个项目,阿里趣视频后台返回的数据有一些是重复的,为了避免重复的数据被展示,我循环了一遍,通过contains函数,如果集合中已经有了这个数据,就不再添加,如下: private ArrayList<HomeBean> videoList = new ArrayList<>();for (HomeBean bean : videoInfoBeans) { if (!videoList.contains(bean)) { vid

2020-08-24 16:22:07 1097

原创 Android主流三方库的源码分析

https://www.cnblogs.com/andy-songwei/p/10955062.htmlhttps://www.jianshu.com/p/c5df0ac39e01https://www.jianshu.com/p/3366e4bec7cehttps://blog.csdn.net/qq_26787115/article/details/50466655

2020-08-23 15:11:32 261

原创 Android 算法篇二--算法必练题

Trie:1.两数之和:https://leetcode-cn.com/problems/two-sum/20. 有效的括号:https://leetcode-cn.com/problems/valid-parentheses/394. 字符串解码:https://leetcode-cn.com/problems/decode-string/146. LRU缓存机制:https://leetcode-cn.com/problems/lru-cache/208. 实现 Trie (前缀树):http

2020-08-21 21:01:13 244

转载 Map.getOrDefault()方法

文章来源:https://blog.csdn.net/qq_37974048/article/details/102941761在JDK8之后,对map新增了getOrDefault()方法格式:Map.getOrDefault(key,默认值);Map中会存储一一对应的key和value。如果 在Map中存在key,则返回key所对应的的value。如果 在Map中不存在key,则返回默认值。public class Demo { public static void main(St

2020-08-21 20:53:00 18563 2

原创 Android 栈stact的相关操作

Stack.peek():返回栈顶的值 ;不改变栈的值,查看栈顶的对象而不移除它。Stack.pop():返回栈顶的值 ;会把栈顶的值删除。Stack.push():把项压入堆栈顶部。E push(E item) 把项压入堆栈顶部。 E pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。 E peek() 查看堆栈顶部的对象,但不从堆栈中移除它。 boolean empty()

2020-08-21 19:47:10 508

转载 android onWindowsFocusChanged()

概述从字面上来讲,onWindowsFocusChanged()方法是指当窗口焦点变化的时候;从意义来说,onWindowsFocusChanged()就是指当前的Activity的Windows(窗口)获取或者失去焦点时这个方法就会被调用,并且当回调这个方法时,Activity是完全可见的。在Activity生命周期中,onStart(), onResume(), onCreate()都不是布局visible的时间点,真正的visible时间点是onWindowFocusChanged()函数被执行时

2020-08-20 18:47:59 1728

原创 Android自定义View5--getWidth()和getMeasuredWidth()区别, view.post(Runnable)引发内存泄漏的原因和解决

getMeasuredHeight()返回的是原始测量高度,与屏幕无关getHeight()返回的是在屏幕上显示的高度实际上在当屏幕可以包裹内容的时候,他们的值是相等的,只有当view超出屏幕后,才能看出他们的区别。当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的高度。在自定义控件时,调用子View的getHeight()得到的结果为0,调用getMeasuredHeight()为子View的真实大小。view.post(new Runnable

2020-08-20 18:35:35 620

原创 Android AndroidManifest.xml doesn‘t exist or has incorrect root tag

1、File->Invalidate Cashes/Restart2、1.关闭Android studio2.打开 C:\Users\UserName.android 删除build-cache3.打开 C:\Users\UserName.AndroidStudio4.0\system删除以下文件夹cachescompilercompile-serverconversionexternal_build_system其他临时文件夹~~~~最好备份一下,一个一个删。我删了之后好了

2020-08-19 19:12:50 14253

转载 Android屏幕适配讲解和实战

一、为什么要屏幕适配基础:1、dpi:屏幕像素密度,指的是在系统软件上指定的单位尺寸的像素数量,它往往是写在系统出厂配置文件的一个固定值;2、ppi:也是屏幕像素密度,但这个是物理上的概念,它是客观存在的不会改变。dpi是软件参考了物理像素密度后,人为指定的一个值,这样保证了某一个区间内的物理像素密度在软件上都使用同一个值;3、dp加上自适应布局和weight比例布局能解决90%的适配问题。因为并不是所有的1080P的手机dpi都是480,比如Google 的Pixel2(1920*1080)的dp

2020-08-18 13:39:54 443 2

原创 Android设计模式--开发中用到的设计模式

View事件分发:责任链模式BitmapFactory加载图片:工厂模式Adapter:适配器模式Builder:建造者模式Adpter.notifyDataSetChanged():观察者模式Binder机制:代理模式单例模式:单例模式中双重检查模式和静态类单例模式;能够保证多线程对象唯一,不会创建多个实例导致程序执行错误或影响性能。双重检查模式和单例模式都能够有效保证线程安全,又都是延时初始化,能够减少不必要的性能开销。后续每个都能点进去看详细的对应文章...

2020-08-17 17:45:55 321

原创 Android设计模式--单例模式的六种实现和单例模式讲解Volatile与Synchronized相关的并发

单例模式用来保证一个类只有一个实例,自行实例化此实例,并提供一个访问此实例的全局访问点。一、饿汉模式(线程安全)public class Singleton { private static Singleton instance = new Singleton(); // 私有构造,不允许外部通过构造实例化 Singleton.class private Singleton() { } public static Singleton newInsta

2020-08-17 14:59:54 966

原创 Android设计模式--二十三种设计模式

一、创建型模式,共五种:1、工厂方法模式2、抽象工厂模式3、单例模式4、建造者模式5、原型模式二、结构型模式,共七种:1、适配器模式2、装饰器模式3、代理模式4、外观模式5、桥接模式6、组合模式7、享元模式三、行为型模式,共十一种:1、策略模式2、模板方法模式3、观察者模式4、迭代子模式5、责任链模式6、命令模式7、备忘录模式8、状态模式9、访问者模式10、中介者模式11、解释器模式四、其他1、并发型模式2、线程池模式...

2020-08-17 10:17:50 998

转载 copy_from_user的详细用法!

转自:https://www.cnblogs.com/Rainingday/p/12618715.htmlcopy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0.copy_from_user(void *to, const void __user *from, unsigned long n)@*to 将数据拷贝到内核的地址@*from 需要拷贝数据的地址@n 拷贝数据的长度(字节)也就是将@form地址中的数

2020-08-15 13:51:18 4785

原创 Android--Binder

一、Binder的基础知识Binder的三个知识点:1、Binder的进程间通信机制2、Binder驱动,dev/binder(linux一切皆文件)3、Binder的Binder.java类(实现了IBinder,就有了跨进程的能力)一次完整的Binder访问:很多app是多进程的,webview,保活,推送,加载图片自己都可以创建进程,如果使用服务,比如闹钟和电话服务,也是跨进程的。多进程的优点就是扩大内存,因为单个进程(每个进程分配一个虚拟机)的内存是有限的,每个手机厂商不同;多进程的优

2020-08-15 10:05:28 122

转载 设计模式六大原则和代码讲解

转载自:http://www.uml.org.cn/sjms/201211023.asp设计模式六大原则(1):单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修

2020-08-15 08:51:49 288

原创 Android--HashMap原理

threshold 阈值,没有阀值的说法(各行各业都没有阀值,只有阈值)。当 HashMap 存储的数据量超过 threshold 时,就会触发扩容。关于扩容:面试官:”准备用HashMap存1w条数据,构造时传10000会触发扩容吗?“关于Hashtable和ConcurrentHashMap:面试中的HashMap、ConcurrentHashMap和Hashtable,你知道多少?关于红黑树:什么是红黑树?一、HashMap数据结构Hash表融合了二者的优点,如下:二、源码分析p

2020-08-14 15:41:51 1495

原创 Android自定义View4--ViewPager的wrap_content无效的原因和解决方案

一、ViewPager的wrap_content无效的原因看ViewPager的源码: @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // For simple implementation, our internal size is always 0. // We depend on the container to specify the

2020-08-12 19:41:45 636 1

原创 Android自定义View3--onMeasure,onLayout源码分析和自定义流式布局

onMeasure() 测量View的大小onLayout() 确定子布局onDraw() 实际绘制内容自定义View主要是实现onMeasure+onDraw自定义ViewGroup主要是实现onMeasure+onLayoutonMeasure的时候是先量子View,再计算和保存自己的尺寸,以FlowLayout的代码为例:int count = getChildCount(); final boolean measureMatchParentChildr

2020-08-12 15:27:04 183

原创 插件化讲解到实战4--启动Activity适配9.0,10.0等版本

插件化讲解到实战1–类加载的解析和双亲委派机制插件化讲解到实战2–调用插件中的类插件化讲解到实战3–Hook的源码分析和启动插件的Activity继续上一篇的讲解是基于Android8.0,下面对6.0,7.0,9.0,10.0进行适配:适配的原因无非就是类和变量变了,或者是9.0开始加入lifeCycle,...

2020-08-07 20:22:23 283

原创 插件化讲解到实战3--Hook的源码分析和启动插件的Activity

插件化讲解到实战1–类加载的解析和双亲委派机制插件化讲解到实战2–调用插件中的类Hook中文意思就是钩子,作用就是改变代码的正常执行流程。在某段SDK源码逻辑执行的过程中,通过代码手段拦截执行该逻辑,加入自己的代码逻辑。通过动态代理和反射实现Hook。查找Hook点的原则:1、尽量静态变量或者单例对象2、尽量Hook public 的对象和方法一方面这两种情况修改的少,另一方面反射的如果不是静态的方法,那么就要拿到方法对应的类的对象。一、代码实现启动插件的Activity启动插件的Activ

2020-08-07 15:28:17 289 2

原创 插件化讲解到实战2--调用插件中的类

插件化讲解到实战1–类加载的解析和双亲委派机制思路通过反射直接调用插件的类肯定是调用不到的。通过上一篇知道,每一个dex文件对应一个Element,因为所有的dex文件都在dexElement数组中,那么合并宿主和插件的Elements就可以调用插件的dex,其实就是将插件的dex放到宿主的dexElement数组中,需要通过反射实现。反射思路:1、获取宿主的dexElements2、获取插件的dexElements3、合并宿主的dexElements和插件的dexElements4、将合并的

2020-08-06 18:56:21 275

转载 Android自定义View1--view的绘制流程

https://www.cnblogs.com/huaranmeng/p/12790752.html

2020-08-06 14:35:11 311

转载 java-getDeclaredField和getField的区别,Method的Invoke方法,setAccessible() 方法

https://blog.csdn.net/caicaimaomao/article/details/86611897

2020-08-06 14:07:17 310

转载 Android自定义View2--触摸事件传递机制

https://www.cnblogs.com/onlywujun/p/3519037.html

2020-08-06 10:40:34 285

转载 Java--异或详解

看源码的时候对^有疑问,抽点时间研究一下:一、异或介绍异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。性质  1、交换律    2、结合律(即(a^ b)^ c == a^ (b^c))    3、对于任何数x,都有x^ x=0,x^0=x    4、自反性 A XOR B XOR B = A XOR 0 = A二、异或使用异或运算最常见于多项式除法,不过它最重要的性质还是自反性:A ^ B

2020-08-04 20:32:34 843

原创 android--Handler 二十问

四个主要的类handle、message、looper、messagequeue和threadhttps://www.jianshu.com/p/43e21be8d849Looper的工作流程:ActivityThread.main();//初始化入口 1. Looper.prepareMainLooper(); //初始化 Looper.prepare(false); //设置不可关闭 Looper.sThreadLocal.set(new L

2020-08-04 14:06:41 960 1

原创 java- ArrayList线程不安全怎么办?

本篇基本是转载:CSDN:沉默王二注:我用的是 OpenJDK 14。一、VectorVector 的源码文档上直截了当地说了,“如果不需要线程安全,推荐使用 ArrayList 替代 Vector。”说实话,在我十多年的编程生涯中,的确很少使用 Vector,因为它的线程安全是建立在每个方法上都加了 synchronized 关键字的基础上,锁的粒度很高,意味着性能就不咋滴。public synchronized boolean add(E e) { modCount++; add

2020-08-03 15:12:58 8181

原创 插件化讲解到实战1--类加载的解析和双亲委派机制

一、类的生命周期及类加载的解析类加载阶段,虚拟机主要完成三件事:1、通过一个类的全限定名来获取定义此类的二进制字节流。2、将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。3、在Java堆中生成一个代表这个类的Class对象,作为方法区域数据的访问入口。拓:上面第三步时候的类的class对象,反射时候会用到,反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法和属性。通过如下代码打印,private void printClassLoader

2020-08-02 22:53:52 269

原创 DexClassLoader和PathClassLoader网上好多错的说法,我们聊一下

一、错误说法看到网上说如下错误说法:一般说起 PathClassLoader 和 DexClassLoader ,大家都会说,前者只能加载内存中已经安装的apk中的dex,而后者可以加载sd卡中的apk/jar。大家心中的回答一定是 PathClassLoader 是用来加载已经安装的 apk 的,DexClassLoader 是用来加载存储空间的 dex / apk 文件的。为什么这样说呢,因为之前我也一直这样理解的,而且网上大部分文章中也都是这样讲解的。以前我看书,看文章也会先给自己一种暗示,认

2020-08-02 16:01:42 1128 1

转载 为什么final定义的成员变量,必须赋值?final;成员变量和局部变量的区别

一、final变量final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常,由final定义的变量为常量。例如,在类中定义PI值,可以使用如下语句:final double PI=3.14;在Java中定义全局常量,通常使用public static final修饰,这样的常量只能在定义是被赋值。public static final double PI_VAULE = 3.14;规范:被定义为final的常量定义时需要使用大写字母命名,并且中间使用下划线进行连接。常

2020-08-01 14:26:05 2823

jdk安装包。java基础环境,jdk下载

jdk安装包

2022-05-28

logfilter安装包

logfilter安装包

2022-05-28

腾讯面试题解析.pdf

腾讯面试题解析,android面试题,2020年面试题,网络基础,常用三方库,算法基础等等的。腾讯面试题解析,android面试题,2020年面试题,网络基础,常用三方库,算法基础等等的

2020-08-23

dex-tools-2.1-new.zip

dex2jar 作用:将apk反编译成java源代码(classes.dex转化成jar文件),最新版2.1版本。原来的旧版很多已经不能反编译了,新版的可以。

2020-07-29

apk反编译工具.zip

Android反编译三件套 apktool 、dex2jar、jd-gui,apktool 作用:资源文件获取,能够提取出图片文件和布局文件进行使用查看;dex2jar 作用:将apk反编译成java源代码(classes.dex转化成jar文件);jd-gui 作用:查看APK中classes.dex转化成出的jar文件,即源代码文件

2020-07-29

空空如也

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

TA关注的人

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