自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张小强的专栏

好记性不如烂笔头,记录点滴,生活源于积累

原创 Android ViewBinding 替换 findViewById 的神器

ViewBinding中文官网ViewBinding 的出现就是为了替代 findViewById 的。以前我们写完布局后就要在代码中使用 findViewById 方法找到 xml 文件中对应的 view ,这样耗时费力,还有可能会出错,比如 view 跟 id 不一致等等,奇奇怪怪的问题,毕竟人力和时间有限,这种简单繁杂的工作直接交给 IDE 去做不是更好,它们做的检测工作肯定比人来更精准。配置Android Studio 3.6 Canary 11 之后的版本都支持使用ViewBinding这个

2020-06-11 12:02:07 177

原创 获取 Android 设备 屏幕,内存,存储大小

获取内存总大小ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();am.getMemoryInfo(info);info.tota...

2020-04-23 11:12:36 93

原创 AndroidStudio 添加系统签名

在做 Android 系统定制时,开发自家的 APP,可能会需要使用到一些特殊的权限,系统相关的 API 等等。因此,APP 自身需要有系统签名才能使用这些权限和 API。那我们要怎么获取系统签名,并给 APP 签上系统签名呢?下面讲解三种签名方式。第一种:系统编译签名在相应 APP 工程目录的mk文件中,添加下面这句话即可:...LOCAL_CERTIFICATE := platform...

2020-03-30 16:41:28 508

原创 AndroidStudio 导入 framework.jar 并优先使用其提供的API

第一步:将编译好的framework.jar(out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar)拷贝到 AndroidStudio 相应工程的 libs 目录下(Project/app/libs)第二步:在 AndroidStudio 中选中 framework.jar 右键选择 Add As L...

2020-01-17 14:27:33 325 1

原创 Android快速编译烧录system.img的方法

快速编译 system.img分别执行下面3条指令。编译命令如下:. build/envsetup.shlunchmake systemimage -j8编译生成后的 system.img 路径out/target/product/xxx/system.img快速烧录 system.img在PC端分别执行下面3条指令即可烧录system.img到Android设备中啦。adb ...

2020-01-10 15:18:30 424

原创 SVN 命令方式批量添加和删除文件

使用SVN管理代码时,我们在linux环境下提交代码遇到大量的文件增加删除时使用命令的方式去提交代码非常痛苦,下面通过组合命令的方式解决了一个个提交命令的繁琐。SVN 批量添加文件:svn st | awk '{if ($1 == "?") {print $2} }' | xargs svn addSVN 批量删除文件:svn st | awk '{if ($1 == "!") {prin...

2020-01-10 14:52:11 221

原创 Android WindManager Addview 监听按键事件

监听 Home,Menu 按键的广播IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);mContext.registerReceiver(mHomeListenerReceiver, filter);private BroadcastReceiver mHomeListenerReceive...

2019-10-28 19:18:41 444

原创 Android 无需 root 卸载系统应用

卸载应用的命令adb shell pm uninstall [-k] [--user USER_ID] 包名-k : 卸载应用但保留数据和缓存--user 指定用户 id : Android 系统支持多个用户,默认系统用户只有一个,id=0。卸载系统应用(例:系统自带的计算器)不指定用户ID当我们不设置用户ID的时候,卸载系统应用是不成功的。adb shell pm unins...

2019-10-21 14:06:28 1771

原创 Android 9.0 System.loadLibrary 的源码解析

本文主要讲解下Android 9.0 System.loadLibrary 的源码实现。源码分析libcore/ojluni/src/main/java/java/lang/System.javapublic static void loadLibrary(String libname) { Runtime.getRuntime().loadLibrary0(VMStack.getC...

2019-09-30 17:27:09 621

原创 Android 9.0 System.getProperty("java.library.path") 源码解析

本文将一步步解析 System.getProperty("java.library.path") 在 Android 9.0 中的源码实现。话不多说开干。源码分析首先,来分析下 System.getProperty() 函数的实现。libcore/ojluni/src/main/java/java/lang/System.javapublic static String getProper...

2019-09-28 11:37:24 545

原创 设计模式之访问者模式

定义提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。UML类图代码实现Element.javapublic interface Element { public void accept(Visitor visitor);}Visitor.javapublic abstrac...

2019-05-13 09:09:35 78

原创 设计模式之模板方法模式

定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。UML类图代码实现AbstractClass.javapublic abstract class AbstractClass { public void templateMethod...

2019-05-13 09:04:01 55

原创 设计模式之策略模式

定义定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。UML类图代码实现Strategy.javapublic abstract class Strategy { public abstract void algorithm();}Context.javap...

2019-05-13 09:02:49 85

原创 设计模式之状态模式

定义允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。UML类图代码实现State.javapublic abstract class State { public abstract void handle();}Context.javapublic clas...

2019-05-13 09:02:04 64

原创 设计模式之观察者模式

定义定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。UML类图代码实现Observer.javapu...

2019-05-13 09:01:01 77

原创 设计模式之备忘录模式

定义在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。UML类图代码实现Originator.javapublic class Originator { private String state; public String getState() { ...

2019-05-11 10:09:15 73

原创 设计模式之中介者模式

定义用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。UML类图代码实现Mediator.javapublic abstract class Mediator { protected ArrayList<Colleague> l...

2019-05-11 10:07:14 59

原创 设计模式之迭代器模式

定义提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。UML类图代码实现Iterator.javapublic interface Iterator { public void first(); public void next(); public boolean hasNext();...

2019-05-11 10:04:11 77

原创 设计模式之解释器模式

定义定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。解释器模式是一种类行为型模式。UML类图代码实现Context.javapublic class Context { private ArrayDeque<String> map = new ArrayDeque<>(); public ...

2019-05-11 10:02:03 183

原创 设计模式之命令模式

定义将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。UML类图代码实现Command.javapublic abstract class Command { public abstract void exec...

2019-05-11 09:59:05 60

原创 设计模式之职责链模式

定义避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链模式是一种对象行为型模式。UML类图代码实现Handler.javapublic abstract class Handler { protected Handler successor; public void setSucc...

2019-05-11 09:55:40 70

原创 设计模式之代理模式

定义给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。代理模式是一种对象结构型模式。在代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到中介的作用,它去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务。远程代理(Remote Proxy):一种常用的代理模式,它使得客户端程序可以访问在远程主机上的对象,远程主机可能具有更好的计算性能与处理速度,...

2019-05-11 09:49:37 71

原创 设计模式之享元模式

定义运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。UML类图代码实现Flyweight.javapublic class Flyweight { private String intrinsicState...

2019-05-11 09:46:29 48

原创 设计模式之外观模式

定义为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。外观模式中所指的子系统是一个广义的概念,它可以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统。子系统类通常...

2019-05-11 09:43:06 57

原创 设计模式之装饰模式

定义动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。UML类图代码实现Component.javapublic abstract class Component { public abstract void operation();}Decorator.javapublic class Decora...

2019-05-11 09:39:32 56

原创 设计模式之组合模式

定义组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。UML类图代码实现Component.javapublic abstract class Component { public abstract voi...

2019-05-10 15:03:11 53

原创 设计模式之桥接模式

定义将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。UML类图代码实现Abstraction.javapublic abstract class Abstraction { protected Implementor impl; public void s...

2019-05-10 14:52:35 60

原创 设计模式之适配器模式

定义将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。在实际开发中,对象适配器的使用频率更高,...

2019-05-10 14:43:15 108

原创 设计模式之建造者模式

定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。UML类图代码实现Product.javapublic class Product { private String partA; private String partB; private String partC; public Strin...

2019-05-10 14:29:21 80

原创 设计模式之原型模式

定义将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。由于在软件系统中我们经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在真实开发中的使用频率还是非常高的。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。浅拷贝在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型...

2019-05-10 14:23:14 125

原创 设计模式之单例模式

定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。UML类图代码实现饿汉式EagerSingleton.javapublic class EagerSingleton { private static final EagerSingleton instance = new EagerSi...

2019-05-10 14:16:08 45

原创 设计模式之抽象工厂模式

定义提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。简而言之,就是工厂不在只生产面包,它同时还可以生产辣条,糖果等食品,转型成一个食品工厂。可以生产多种食品类产品,就是说从单一食品种类面包生产,到支持多种类型的食品生产的工厂。UML类图代码实现ProductA.javapublic abstract class...

2019-05-10 11:48:07 83

原创 设计模式之工厂方法模式

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。工厂方法模式是一种类创建型模式。简而言之,就是现在有多家面包生产工厂,分别是菠萝...

2019-05-10 11:41:52 57

原创 设计模式之简单工厂模式

定义定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,因此简单工厂模式又被称为静态工厂方法模式,它属于类创建型模式。简而言之,就是面包工厂生产各种面包,分别是菠萝包、手撕面包、火腿肠面包等等面包,客户想要生成什么面包,就跟工厂说需要生产什么面包即可。缺点就是客户需要三明治面包的话,工厂必须另外在增加一条三明...

2019-05-10 11:35:04 61

原创 设计模式之总序

概述模式是特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。软件模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思想或参照样板。软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等。设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。七大设计原则1、单一职...

2019-05-10 11:31:41 98

原创 面试题:打印螺旋数字

输入一个n,打印n阶螺旋n = 11n = 29 2 38 1 47 6 5n = 325 10 11 12 1324 9 2 3 1423 8 1 4 1522 7 6 5 1621 20 19 18 17如上,输入不同的n值得到不用的数字螺旋。通过上面的示例可以找出基本规律:1总是在最中心位置,最大边的个数与n的关系是2n-1的关系,以及最左上角的值是最大边的乘...

2019-05-06 18:25:26 777

原创 UTF-16BE、UTF-16LE、UTF-16 三者之间的区别

简介实际项目开发中,我们有时候可能需要将字符串转换成字节数组,而转化字节数组跟编码格式有关,不同的编码格式转化的字节数组不一样。下面列举了java支持的几种编码格式:US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character setISO-8859-1 ...

2018-12-10 12:11:49 12237 1

原创 EventBus 最新上手指南

简介EventBus 是一款针对 Android 优化的发布/订阅事件总线。主要功能是替代 Intent,Handler,BroadCast在 Fragment,Activity,Service,线程之间传递消息。优点是开销小,代码更优雅。以及将发送者和接收者解耦。EventBus 官网EventBus GitHub使用第一步:定义 events 对象public class M...

2018-10-12 17:40:17 453

原创 Android中CountDownLatch实现多线程同步

简介CountDownLatch 通过它的名字也能猜出一二来,Countdown 顾名思义倒计时,Latch可以理解为触发或者发射。也就是说当倒数到0时就可以发射火箭啦,在线程中就是一个等待的线程,当 countdown 到 0 就不用再等待了,可以向下执行任务了。上面分析了一下 CountdownLatch 的概念,相信大家也能体会它的使用场景了。在多个线程中,如果某个线程需要等待其他几个线...

2018-10-11 10:15:20 2179 4

原创 Android中ConditionVariable实现多线程同步

简介ConditionVariable 是一个实现多线程同步的类,是对 Object 方法中的 wait() 和 notify() 的封装。其提供了三个方法 open()、close()、block() 简化了多线程的同步操作。通过这个类我们可以非常便利的实现多线程的同步操作。使用用法先来看下它的使用方法,下面的例子是一个简化版的利用ConditionVariable实现的生产者消费者模式的...

2018-09-25 16:46:31 381

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