TouchBar中调节音量和亮度消失
打开 Terminal,运行”killall ControlStrip“,就可以了如果觉得此文章对你有所帮助,👍🏻请点个赞👍🏻
Android-如何使用注解进行代码检查
Nullness 注解
使用 Nullness 注解可以检查给定变量、参数和返回值是否允许 null值
@Nullable :表示可以为 null 的变量、参数或返回值,
@NonNull :表示不可为 null 的变量、参数或返回值。
@NonNull@Overridepublic View onCreateView(String name, @NonNull Context context,@NonNull AttributeSet attrs) { //...}
资源注解
资源注解的使用可使得在源码阶段让编辑器检查书写的不规范,一定程度上优化代码结构
@StringRes: 表示检查是否包含R.string引用
@ColorRes: 表示检查是否包含R.color引用
@ColorInt: 表示检查是否包含表示颜色的整型
@DrawableRes: 表示检查是否包含R.drawable引用
@DimenRes: 表示检查是否包含R.dimen引用
@InterpolatorRes:表示检查是否包 ...
EventBus使用方式
前言
Android开发中 EventBus的使用目录简介
一套 Android / Java 事件订阅 / 发布框架,由greenrobot团队开源,它的出现简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题。
使用方式引入依赖eventbus : 'org.greenrobot:eventbus:3.2.0'
注册、注销@Overrideprotected void onStart() { super.onStart(); EventBus.getDefault().register(this);}@Overrideprotected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this);}
订阅者@Subscribe(threadMode = ThreadMode.MAIN)public void onUpDateEvent(BaseMessageEvent messag ...
Handler-内存泄漏解决方案
前言
Android开发中,内存泄漏是经常发生的,今天来详细聊一聊Handler使用过程中产生内存泄漏的场景以及对应的解决方案。
目录
问题描述
Android中使用Handler导致内存泄漏原因分析。当一个对象已经不再被使用时,本该被回收但却因为有另外一个正在使用的对象持有它的引用从而导致它不能被回收,导致了内存泄漏。
原因详解
在Handler消息队列还有未处理的消息 / 正在处理消息时,消息队列中的Message持有Handler实例的引用,由于Handler = 非静态内部类 & 匿名内部类又默认持有外部类的引用。如图
解决方案
静态内部类+弱引用
静态内部类 不默认持有外部类的引用,从而使得 “未被处理&正处理的消息 -> Handler实例 -> 外部类”的引用关系不复存在。
使用WeakReference弱引用持有Activity实例的原因:弱引用的对象拥有短暂的生命周期。在垃圾回收器线程扫描时,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存
工具类封装
package com.linked.busine ...
Handler-消息通讯机制详解
前言
Android开发中,Handler媒介机制十分常用,今天我们来详细聊一聊Handler通讯机制是如何实现的。
目录
使用场景在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现工作线程对UI线程的更新,最终实现异步消息的处理。
概念描述Handler、Message、MessageQueue、Looper相关概念如下图。
概念
定义
作用
主线程( UI线程、Main Thread )
系统首次启动,会创建主线程
处理UI相关操作( 如:更新UI )
子线程( 工作线程 )
人为开启的线程
执行耗时任务( 如 网络请求、数据加载等 )
消息( Message )
线程间通讯数据单元(handler接收&处理消息对象)
存 ...
Java高级特性-反射
前言 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
应用场景Android中最熟悉的反射,莫过于Json数据的转换,例如网络数据,数据库数据和类之间的相互转化。使用反射机制可以直接创建对象,方便代码管理。
相关类. Class
class类下部分常用方法
方法名
翻译
forName(String className)
加载参数指定的类,并且初始化它。
cast
对象转换成代表类或是接口的对象
getClasses()
返回一个数组,数组中包含该类中所有公共类和接口类的对象
getName()
获取类路径名称
newInstance
创建类的实例
getPackage()
获取类所在包
getInterfaces()
确定此对象所表示的类或接口实现的接口
getSuperclass()
获得当前类继承的父类的名字
getClassLoader()
获取类加载器
getDeclare ...
LruCache-原理分析
1.LruCache原理是什么 LruCache 采用最近最少使用算法,设定一个缓存大小,当缓存达到这个大小之后,会将最老的数据移除,避免图片占用内存过大导致OOM。
2.Lrucache源码分析 public class LruCache<K, V> { // 数据最终存在 LinkedHashMap 中 private final LinkedHashMap<K, V> map; ... public LruCache(int maxSize) { if (maxSize <= 0) { throw new IllegalArgumentException("maxSize <= 0"); } this.maxSize = maxSize; // 创建一个LinkedHashMap,accessOrder 传true this.map = new LinkedHashMap<K, V>(0, ...
Java-链表(单向、循环、双向)
前言:什么是链表?链表是一种常见的基础数据结构,是一种线性表,但并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针来做关联,同时链表也分为,单链表、双链表、循环链表。
单链表(单向链表)单链表由两个部分构成
DATA域:数据域、用来存储数据元素
NEXT域:指针域、用来指向下一个节点
链表与数组类似,也可以进行查找、插入、删除、读取等操作,但是由于链表与数组的特性不同,导致不同操作的复杂度也不同
查找方式
从头节点进入,开始比对节点的值,如果不同则通过指针进入下一个节点
重复上面的动作,直到找到相同的值,或者节点的指针指向null
时间复杂度为O(n)
插入或删除方式链表与数组最大的不同就在于删除、插入的性能优势,由于链表是非连续的内存,所以不用像数组一样在插入、删除操作的时候需要进行大面积的成员位移,比如在a、b节点之间插入一个新节点c,链表只需要做
a断开指向b的指针,将指针指向c
c节点将指针指向b,完毕(这才是魅力所在)
插入或删除只需要调整指针即可。
时间复杂度为O(1)
下面看下链表的插入、删除操作
读取方式链表 ...
LinkedHashMap-原理分析
前言:LinkedHashMap 是如何做到LruCache ,下面我们从源码中看一看
LinkedHashMap构造函数/** * Constructs an empty insertion-ordered <tt>LinkedHashMap</tt> instance * with the specified initial capacity and load factor. * * @param initialCapacity the initial capacity * @param loadFactor the load factor * @throws IllegalArgumentException if the initial capacity is negative * or the load factor is nonpositive */ public LinkedHashMap(int initialCapacity, float load ...
Glide-缓存那些事儿
前言: 在我们开发的时候对图片加载是必须使用的 这篇文章我们就聊聊Glide缓存。
Glide 缓存分几种答:缓存分为两种:内存缓存、磁盘缓存
内存缓存:内存缓存又分为两种:一种是:弱引用缓存、一种是: Lrucache缓存。往下看Glide内存缓存是如何实现的,源码如下:
public <R> LoadStatus load( GlideContext glideContext, Object model, Key signature, int width, int height, Class<?> resourceClass, Class<R> transcodeClass, Priority priority, DiskCacheStrategy diskCacheStrategy, Map<Class<?>, Transformation<?>> transformations, boo ...