自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 适配从 Android10 升级至 Android 13的问题

适配从Android10 升级至 Android 13,即 target>= 33 遇到的问题

2024-01-07 11:13:39 1011 1

原创 Glide设置了listener却没有回调

接入第三方广告SDK时,使用对方的自渲染信息流广告,在拿到对方图片物料并使用Glide加载网络图片时,Glide并没有发起网络请求。期望结果是图片物料展示,且listener打印回调。实际结果是:物料没有展示且任何回调都没有打印。为什么会出现上面的结果那?

2023-06-20 15:50:46 431

原创 Android--记录一次触摸事件回收导致的崩溃

ava.lang.RuntimeException: MotionEvent **** recycled twice

2022-08-23 16:21:48 815 1

原创 Android---使用Hook技术移除特定的弹窗

移除第三方弹出的window

2022-07-16 09:31:42 1277

原创 Android Animation 分析与总结

​例如:在ViewGroup中可以控制子元素的出场效果,在Activity中可以实现不同Activity的之间的切换效果。概念:在一段时间间隔内完成对象的某一个属性(位置,透明度等),由一个属性值向另一个属性值的改变。属性动画要求对象必须为指定的属性提供 set() 和 get(),否则就会失败,这里我们可以想一下为什么?属性动画是 API11 新加入的特性(nineoldandroids开源库实现向下兼容)。我们知道,补间动画只能作用于 View,而属性动画可以为 任意对象 添加动画效果;另一方面,属性动

2022-06-21 23:35:29 482

原创 Synchronized 分析

等待-通知机制:类比现实世界中的就医流程:1. 我们先去挂号,然后到就诊门口,排队等待叫号2. 当我们的号码被叫时,我们进门诊看医生3. 医生说我们需要验血,于是我们去抽血验血,他叫下一位排队的病人4. 我们拿到验血报告后,重新分诊后在门诊口排队,等待叫号5. 当医生再次叫到我们的号时,我们再进去看医生。6. 看完后,我们告别医生,接着回家。就医流程结合并发编程会是什么样的那?1. 我们到门诊就诊,类似于线程去获取互斥锁,在门诊口排队等待叫号,类似于互斥锁被其他线程占有,当前线程被放到锁

2021-11-29 10:43:52 116

原创 Android Animation 分析与总结

属性动画的原理:通过反射setXX()/getXX()方法,动态修改属性XX的值1.为什么会有Animation?实现项目中的一些特殊效果,使项目看起来更加顺畅2.Animation的含义是什么?针对android中的不同控件,实现控件的渐变,移动,旋转,缩放,以及组合形成的其他混合效果。原理分析:1 调用View.startAnimaiton(Animation),开启一...

2021-11-15 17:01:07 393

原创 Android 内存泄露常见场景汇总

心情么么哒,又可以白嫖咯…常见概念什么是内存泄露?该被GC回收的内存没有被回收。讲人话:短生命周期的引用被长生命周期的对象持有,导致短生命周期的对象的内存无法被GC回收。举个例子:非静态内部类默认持有外部类的引用,不幸的是,我们在外部类创建了一个该内部类的静态实例。静态实例的生命周期与长与普通实例的生命周期,而静态实例是可以作为GCRoots的根节点的,导致GC在进行可达性分析时,外部类的引用一直在引用链上,不被回收。这样就导致了外部类对象的内存泄露。持续的内存泄露会导致内存溢出什么是内存

2021-11-12 17:02:06 1941

原创 Java 线程生命周期

线程生命周期准备状态触发时机:使用 new 关键字创建一个线程。特点: 准备状态的线程不能被CPU调度。就绪状态特点: 就绪状态的线程才能被CPU调度,通过线程切换,获取CPU时间片的使用权。触发时机:调用线程的 start()时间片用完,即硬件设备发出中断指令,CPU进行线程切换。线程主动调用 yield()。即:线程在等待锁的过程中,主动让出时间片线程内部使用了锁,在没有获得锁的时候,也是在就绪状态运行状态触发时机:该线程获取CPU时间片的使用权后,由操作系统调用

2021-11-11 16:59:45 554

原创 Handler 源码学习与分析

目录MessageMessage中一些常见的参数与APIpublic final class Message implements Parcelable{ public int what; // 消息的id public int arg1; // 整数参数1 public int arg2; // 整数参数2 public Object obj; // 任意类型参数 int flags; // 消息标记:正在使用异步还是同步 Bundle data;

2021-11-05 18:00:00 1548

原创 Android--耗电优化

谁在消耗手机电池的电量我们写的应用程序不会直接消耗手机电池的电量,而会通过使用手机的硬件模块来消耗电量。例如:CPU,WIFI 模块, GPS 模块,NetWork 模块, WakeLock 模块, 音视频,Screen…电量与应用程序电量计算公式:** 电量 = 电压 * 电流 * 时间 **。一般,手机的电压是恒定的,所以,电量只与电流和时间的乘积有关。所以,模块电量计算公式:**模块电量= 模块电流 * 模块使用时长 **。不同的模块,单位时间内消耗的电流不一样。如何获取模块单位时间.

2021-10-13 18:51:23 1257

原创 Android--SharedPreferences学习

文章目录定义读操作优化写操作优化线程安全ANR问题进程安全问题总结定义SharedPreferences 是一种轻量级的存储类,以KV(Key-Value)键值对的方式保存数据,其数据存储在本地的一个xml文件中,默认是data/data/share_prefs文件。所以,SP本质是对XML文件的读写操作。在使用K读取和写入对应的V时,需要对xml文件进行解析,因此这是一个耗时随着文件大小成正比的操作。轻量级:SP适合存储简单的数值类型的数据,复杂的数据不适合存在SP中。读操作优化从SP的本质可

2021-10-09 18:51:28 329

原创 Android--大转盘

文章目录前言思考代码总结前言无论是线上推广,还是线下营销,转盘游戏都是非常吸引人的一项活动,就像电视剧《赘婿》中的“拼刀刀”,达到的是万人空巷的影响力。其实,这是一种赌徒心理。每个人都希望不劳而获,这是赌徒心理的成长的肥沃土壤,不幸的是,千百万年的成长中,人已经形成了避难趋易的本性。转盘是一种傻瓜式的操作,只需要手指点一下,不过几秒钟,就可以收到反馈。而想要立即得到结果,害怕未知依然是每个人的本质。所以,转盘游戏有其滋生的土壤。思考怎么样实现一个转盘那?首先:转盘是一个圆,然后把圆等分成几份,每一

2021-10-09 11:25:24 1344 3

原创 Android--仿抖音刷新

文章目录前言观察&思考代码实现使用总结前言抖音作为一个国民级的娱乐短视频应用,小编平常的时候也没少刷,往往一刷一关,半天就过去了。作为一个 Android 开发者,玩自家的应用没有玩抖音的时间长,感觉挺丧的。出于一种莫名其妙的心理,就想着从抖音那里偷学一些东西。但是从哪里开始那?想了想,还是先偷一个刷新动画吧。观察&思考先是觉得抖音的刷新动画挺好玩的,然后仔细观察了下。首先它有两个圆,一个红的,一个白的,感官上两个圆像是围着一个大圆在做圆周运动,忽左忽右,忽前忽后的,说明它用到了平移

2021-06-11 16:11:50 277

原创 跨越千年的粽子

跨越千年的粽子粽子是咱们国家的国粹!为什么这么说那?泱泱五千多年历史文化的华夏大国,粽子的文化就占了两千多年,它不是国粹,是什么!可是,咱们有谁真正的了解粽子为什么会出现?它又是怎样发展的?小编不才,查阅资料,才得了一个大概。各位看官,且听在下,向你陈述关于粽子的前世今生...粽子,古称“角黍”。从春秋起,直到现在,每年端午都会吃粽子,它的软糯与香甜,总是温暖着我们的胃与心。那么,它为什么被古人称为“角黍”那?春秋时期,咱们还处在农耕文明下,那时候,科学不发达,没有手机与网络,对一切不可预料

2021-05-21 19:12:25 466 3

原创 设计模式之代理模式

代理模式1.代理模式介绍代理模式也称委托模式,是一种结构型设计模式。2.代理模式的定义代理模式是在不改变原始类的情况下,通过引入代理类实现对原始类附加新的能力.3.代理模式的使用场景当无法或不想直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象间接访问。为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。4. 实现方式代理模式的实现根据不同的条件,实现的方式也不同.原始类是我们自己维护的,那么我们可以使用基于接口而非实现的思想实现.步骤:1.代理类与原始类实现同

2021-01-21 14:46:47 139

原创 Android - 九宫格

前言作为一个懂点Android的搬砖猿,作为一个有孩子的爸爸,看到孩子天天玩农药,就想着怎么减少他玩农药的时间.后来观察了他一段时间,总结出一个规律:他刚进游戏的时候会先去用钻石抽奖,看到转来转去的动画,他还特别高兴.于是乎就用android的知识,写了一个九宫格抽奖的Demo.思考怎么样实现一个九宫格那?我想到的是Android现有的控件有哪些可以实现:GridView,RecyclerView,这些都可以实现九宫格,且我都实现了一遍.但是写出来之后,我觉得没有什么挑战性,就想着:作为一个Andro

2021-01-17 17:45:43 666 1

原创 实现将金币按照千为单位,以","分割的算法

实现将金币按照千为单位,以","分割的算法class MultixCoins { public static void main(String[] args) { System.out.println(adjustCoins(1222000000, '-')); adjustCoin(15203, ','); System.out.println(sb.toString()); } private static StringBuilder sb = new

2020-12-17 19:03:39 136

原创 RecyclerView 进度条样式

文章目录ScrollBar 属性自定义圆角 ScrollBar 样式源码分析结尾ScrollBar 属性属性选值影响scrollbarsvertical/horizontal/none设置垂直/水平方向的进度条 or 不设置进度条scrollbarStyleinsideOverlay默认值,在padding区域内并且覆盖在view上scrollbarStyleinsideInset在padding区域内并且插入在view后面scrollbarStyle

2020-10-27 18:52:33 1463

原创 关于对象池的一些分析和总结

文章目录定义如何设计一个对象池实例 OkHttp的网络连接池定义有借有还,先放在这,突然觉的这句话与对象池很配!!!将具有生命周期期的结构化对象缓存到带有一定管理功能的容器中,以提高对象的访问性能。对象池与普通的本地 cachce 缓存策略有什么不同? 第一:本地 cache常常会有一些失效策略,比如按照时间,访问量等,而 对象池是没有这些特性的;第二:缓存中的对象是没有一个完整生命周期的概念,而对象池中的对象是具有完整生命周期的,而且我们还可以管理这些生命周期。从上面不难看出,对象池的目的: 减

2020-07-17 15:38:10 267

原创 Android——UI卡顿分析与整理

文章目录以下内容,参考至 [面对 UI 卡顿,如何入手分析解决问题](https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1881)什么导致了卡顿怎么分析卡顿问题CPU&GPUVsyncChoreographerSystrace 工具卡顿常出现的场景以下内容,参考至 面对 UI 卡顿,如何入手分析解决问题什么导致了卡顿内存抖动是造成 UI 卡顿的最主要原因。内存抖动的原因是频繁的创建和回收对象。而回收对

2020-07-16 17:30:04 526

原创 Java垃圾回收学习与总结

文章目录GC垃圾回收以下内容参考至 [Android工程师进阶](https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1856)什么是垃圾什么时候触发垃圾回收哪些对象是垃圾?1. 引用计数算法2.可达性分析算法验证GC Root1. 验证栈帧中的局部变量表中引用的对象可以作为GC Root2. 验证方法区中的静态变量引用的对象可以作为GC Root3. 验证活跃线程作为GC Root4. 验证成员变量是否可以作为 G

2020-07-15 12:48:52 141

原创 LinkedHashMap 学习总结

文章目录LinkedHashMap简介LinkedHashMap源码分析总结双向链表 LinkedHashMapEntryput(K k, V v) 添加数据并构建双向链表get(K key) 访问数据remove(key) 删除指定key 的节点总结问题LinkedHashMap简介我们知道 HashMap 是 数组+链表/红黑树 的存储结构,它不能保证遍历顺序和插入顺序的一致。LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构 数组+链表/红黑树,不同的是: Li

2020-07-14 17:23:47 195

原创 并发库——ReadWriteLock

文章目录原则概念原理写锁的获取与释放读锁的获取实战总结原则允许多个线程同时读共享变量只允许一个线程写共享变量如果一个线程正在写共享变量,此时禁止线程读共享变量。通过以上原则,我们不难看出:读写锁与互斥锁最大区别是:读写锁允许多个线程同时读共享变量,而互斥锁不允许。这也是读写锁在读多写少环境下性能优于互斥锁的关键。概念可重入:当线程拿到锁的时候,在临界区再次尝试获取同一把锁,此时会锁的状态*volatile int state++*会加一。这种特性叫做可重入。锁升级:在拿到读锁且没有释放

2020-07-09 17:09:57 108

原创 并发库 —— CopyOnWriteArrayList

概述CopyOnWrite(COW)是在写操作的时候copy当前数据,然后在写完数据之后设置成新的数据。适用于读多写少的并发场景。CopyOnWrite 使用了 ReentrantLock(支持重入的独占锁) 来支持并发操作。ReentrantLock 是一种支持重入的独占锁,任意时刻只允许一个线程来获得锁。ReentrantLock 默认是非公平锁(即不按照进入等待队列的顺序唤醒线程)机制。本质是一种延时策略,只有在真正需要复制的时候才复制,而不是提前复制好。源码分析添加与读取元素fina

2020-07-02 16:16:11 175

原创 Retrofit 与 OkHttp 实现网络请求

Retrofit什么是Retrofit基于 RESTful Api设计规范的 Http 网络请求框架的封装。网络请求本质上还是使用OkHttp完成,而Retrofit负责网络网络请求接口的封装。使用步骤创建 Retrofit 实例,使用单例模式创建描述网络请求的接口(Interface)并使用 注解 描述并配置网络请求参数创建网络请求接口实例 retrofit.create();发送网络请求(Request) enqueue,交由OkHttp处理请求OkHttp得到服务端响应(Respon

2020-07-02 11:20:08 492

原创 RecyclerView学习与总结

RecyclerViewRecyclerView,顾名思义,这个View代表的就是一个可循环使用的视图集合控件,它定义了ViewHolder类型标准,封装了View缓存判断逻辑,更强大的是它可以通过一个LayoutManager将一个RecyclerView显示为不同的样式。目的: 在有限的屏幕内展示大量的内容。RecyclerView的五虎将RecyclerView.LayoutManager :负责Item视图的布局的显示管理RecyclerView.ItemDecoration:给每一项I

2020-06-01 00:05:23 456

原创 Android 存储学习

文章目录前言:此文是对张绍文在极客时间上的文章做的笔记Android 存储基础Android 分区Android 存储安全Android 存储方式序列化与反序列化对象序列化数据序列化前言:此文是对张绍文在极客时间上的文章做的笔记Android 存储基础Android 分区什么是分区?分区就是将设备中的存储划分为一些互不重叠的部分,每个部分都可以单独的格式化,用作不同的目的。使用 ad...

2020-02-13 12:59:57 513

原创 SlidingPanelLayout学习与使用

文章目录SlidingPanelLayout应用场景常用API使用方式源码分析总结SlidingPanelLayout应用场景SlidingPaneLayout 是Android在android-support-v4.jar中推出的一个支持测滑面板的布局。例如:头条详情页,知乎详情页…都是支持侧滑移除Activity的。通过抓取手机页面的xml,可以看到他们使用的技术也都是SlidingPa...

2020-01-16 18:28:28 670

原创 Android线程间通信 ——Handler

Handler解决了什么问题?由于Android开发规范的限制:子线程不能进行UI控件的刷新,否则就会触发异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.。但是在子线程执行...

2020-01-05 23:30:12 167

原创 虚拟机类加载机制总结与整理

虚拟机类加载机制,来自《深入理解Java虚拟机》虚拟机把描述的数据从Class文件加载到内存,并对数据进行校验、转化解析和初始化,最终形成可以被Java虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从被加载到虚拟机内存开始,到卸载内存为止,它的生命周期包括了加载,验证,准备,解析,初始化,使用,卸载七个阶段,其中验证,准备和解析三个部分统称为连接。1.类加载的过程类加载的全部过...

2020-01-03 11:01:06 109

原创 Android异步消息处理机制——AsyncTask

原理:使用 ThreadPool + Handler 实现:在子线程进行耗时操作,UI线程实现UI更新,防止阻塞UI线程。即:子线程向UI线程切换。执行步骤创建AsyncTask实例(必须在UI线程) new AsyncTask(Params… params)asynctask.excute(),使用线程池执行异步任务(必须在UI线程) WorkerRunnable exte...

2020-01-03 08:12:55 213

原创 散列表是什么?

根据极客时间上王争的《数据与算法之美》总结如下:定义散列表使用的是数组支持按照下标随机访问数据的特性,因此它的查找时间复杂度为O(1)。我们通过散列函数将Key映射为数组下标,然后将数据存储在数组中对应下标的位置上。当我们按照Key查找元素时,使用相同的散列函数将key映射为数组下标,从数组下标位置上取出数据。散列函数构造散列函数时,需满足以下条件:散列函数得到hash值必须是一个非...

2019-12-27 09:06:13 454

原创 ConstraintLayout——约束布局学习与使用

目录 介绍 为什么使用ContraintLayout 如何使用ConstraintLayout 辅助工具 总结 目录参考介绍ContraintLayout是一个android.view.VBiewGroup,可以在系统Api 9以上使用,它的出现主要是为了解决布局嵌套过多的问题。从Android Studio 2.3起,官方模板默认使用Constrain...

2019-11-07 15:17:52 374

原创 Android跨进程通信——ContentProvider

概念作为四大组件之一(Activity , Service , BroadcastReciver , ContentProvider),为我们提供了不同进程甚至是不同应用之间共享数据的机制。启动性能ContentProvider的onCreate()在Application.onCreate()之前调用,而且都是在main线程创建的。因此,自定义ContentProvider的构造函数,静态...

2019-11-07 00:26:05 525

空空如也

空空如也

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

TA关注的人

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