自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 资源 (17)
  • 收藏
  • 关注

原创 Android序列化(六) 之 FlatBuffers

FlatBuffers(官方地址:FlatBuffers: FlatBuffers)最初是由Google创建用于游戏开发或者其它性能敏感的应用程序需求上的一个可跨语言、跨平台、高效的开源序列化工具库。目前开源的游戏戏引擎Cocos2d-x便是使用FlatBuffers来序列化所有的游戏数据;Facebook在Android应用程序中也是使用了FlatBuffers进行客户端与服务端的通信;谷歌的趣味推进实验室在所有的图书馆和游戏中也广泛使用FlatBuffers。FlatBuffers使用时只要使用.fbs

2022-07-03 21:50:49 1928 1

原创 Android序列化(五) 之 Protocol Buffers

Protocol Buffers(官方地址:https://developers.google.com/protocol-buffers)是Google开发的一种比XML和Json更小、更快、更简单、可跨语言、跨平台且扩展性好的序列化数据的机制。使用时只要使用.proto文件一次定义好数据的结构化方式,然后借助工具便可以针对 Java、Python、Objective-C 或 C++等语言(proto3还可支持 Dart、Go、Ruby 和 C#)使用命令生成特殊的源代码将数据结构或对象转换成二进制串写入和

2022-06-06 20:21:35 1117

原创 Android序列化(四) 之 Gson

1 概述Json(JavaScript Object Notation)是一种可读性和通用性都非常强的轻量级的数据交换格式,一开始是JavaScript中广泛使用,到了后面流传几乎所有语言都有相应的使用API,所以它已是行业公认的标准。与JavaScript等的动态类型语言一起使用时非常方便,只要将数据转换成字符串,便可以在函数之间轻松地传递字符串进行数据传递。但是在像C++、Java等的静态类型语言序列化数据时,Json的效率表现仅一般,而且还需要编写较多代码来访问数据和转化成类对象。Gson是G

2022-03-18 18:10:03 6275

原创 Android序列化(三) 之 XML

1 概述XML(eXtensible Markup Language)是指可扩展标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,常被用来传输数据和存储数据。SUN为Java处理XML推出了JAXP(Java API for XML Processing,Java XML处理的应用接口),它定义的两类不同的对XML文档进行分析、处理的方法,一类是基于文档对象模型,代表的有DOM,另一类是事件驱动模型代表的有SAX和Pull。Android SDK中包含了JAXP

2022-03-18 17:55:28 2060

原创 Android序列化(二) 之 Parcelable

1 简介在Android组件间或者跨进程组件间要传递数据都是通过使用 Intent.putExtra() 或者 Bundle.putXXXExtra()方法进行,这些方法无法支持传递对象的引用,而只支持基本平台类型和实现了Serializable或者Parcelable接口的类对象。Serializable接口我们在《Android序列化(一) 之 Serializable》中已经介绍过,它是Java提供的可将对象序列化成字节流进行文件持久化存储或网络传输,也可将字节流反序列化成新的对象。Par

2022-03-10 14:12:53 6078

原创 Android序列化(一) 之 Serializable

1 简介序列化是指将数据对象转换成为一种可存储或可传输的数据格式,而反序列化则是相反的操作,将序列化后的数据还原成对象。最为常见的序列化应用有Json和XML,它们都是行业公认的标准。而在 Java 里,有专门提供了 Serializable 接口用于对象的序列化和反序列化。Serializable接口在java.io包中定义,它本身并不存任何字段和方法,只是用于标识类为可序列化。类对象在序列化后会被转换成为字节输出流OutputStream(BufferedOutputStream、ByteArr

2021-12-12 22:21:18 6176

原创 行为型设计模式(十一) 之 自定义表达式和解析可用解释器模式

1 定义解释器模式(InterpreterPattern)属于行为型设计模式,它主要是为了解决当出现一种特定类型的问题且发生频率足够高时,那么就可以将该类问题的各个实现表述为一个简单的语言句子,然后通过构造一个解释器来解释这些句子来解决问题。这是一种使用了编译语言的思想来分析应用中的实例的行为。通俗些说就是提供一种有语法规则的表达式,然后再设计出一个解释器来解释该表达式的意思。例如现在我们需要实现一个非阿拉伯数字而是可以识别汉字的计算器程序,当传入如“伍加拾壹加捌减六”便可像传入“5+11+8-6”一.

2020-11-09 18:01:08 448 2

原创 行为型设计模式(十) 之 稳定的结构多变的算法使用访问者模式将其分离

1 定义访问者模式(Visitor Pattern)属于行为型设计模式,它主是为了解决在不改变元素对象结构的前提下,接受一个访问者角色,访问者可以进行元素算法的执行,而且算法的执行可以随着访问者的改变而改变,从而使元素中的数据结构和数据算法分离达到松耦合效果。例如在公司部门中,有研发工程师和产品经理两类员工,他们就是上述中的元素,他们接受公司领导的工作报告查阅,领导就是访问者,领导的查阅不会影响到他们原来正常的工作,部门经理或者老板是不同的领导,他们所关心的查阅工作和考核标准是不一样的。2 实现

2020-11-04 10:20:35 200

原创 行为型设计模式(九) 之 中介者模式优化多对象的复杂交互

1 定义中介者模式(Mediator Pattern)又叫调停者模式,属于行为型设计模式,它主要用于降低对象间交互的依赖和通讯复杂性,提供了一个中介的角色来封装处理对象间的通讯,将原来多个对象间网状的通讯行为(多个对象相互通讯)改变成为星型通讯行为(每个对象只跟中介交互,中介者再转达),从而达到松耦合效果。例如现实买卖房子双方和房产中介之间的交互,一般情况买方和卖方不直接进行交易,而是通过房产经纪进行信息或者物质的传递。2 基本实现中介者模式一般包含4个角色,分别是:抽象中介(Mediato

2020-11-04 10:17:57 199

原创 行为型设计模式(八) 之 备忘录模式实现数据存档

1 定义备忘录模式(Memento Pattern)属于行为型设计模式,它主要用于在不破坏封装性的前提下,捕获一个对象当前内部状态并进行保存,并且在之后需要时从对其进行恢复到原先保存前的状态。另外为了保护被保存的对象状态完整性以及内部实现的封装不对外暴露性,还要保证保存的对象状态不能被外部随意访问。例如现实玩游戏场景中,我们一般会在打大BOSS时对当前游戏数据进行一个备份,如备份到关卡、生命数、装备等信息,万一打不过BOSS挂掉了还可以从备份存档中恢复回来,免得又得从头玩起。2 基本实现备忘录模

2020-11-04 10:15:27 214

原创 行为型设计模式(七) 之 命令模式可让行为请求和行为接收解偶

1 定义命令模式(Command Pattern)属于行为型设计模式。它主要是为了解决行为请求者与行为接收者之间的解偶,使用了一系列的请求命令进行封装,避免了请求者与接收者的直接调用,而且命令还可形成序列,接收多个命令后一并转交接收者实现。例如现实场景到饭店吃饭,我们并不会直接跑到厨房跟厨师说要吃什么,而是看好菜单后通过服务员记录好要吃什么菜,然后服务员再将刚才下的单转交到厨房厨师去烹调。2 实现命令模式一般包含4个角色,分别是:抽象命令(Command):用于定义命令的基本属性和命令执行方

2020-11-04 10:13:12 190

原创 行为型设计模式(六) 之 广播式的通知是观察者模式

1 定义观察者模式(Observer Pattern)属于行为型设计模式,它主要用于被观察者对象与观察者对象的通讯,被观察者与观察者的关系是一对多的依赖关系,当被观察者状态发生改变时,所有依赖它的观察者都能自动收到改变的通知并做出各自相应的逻辑处理。发布/订阅模式(Publish/Subscribe Pattern)是后来观察者模式的一个进化版,它也可算是观察者模式的一个别称。发布/订阅模式跟观察者模式本质上都是为了解决一个对象跟多个对象的通迅,其最大的区别在于发布者(被观察者)跟订阅者(观察者

2020-11-04 10:09:30 384 1

原创 行为型设计模式(五) 之 模板方法模式是框架最基本的特征

1 定义模板方法模式(Template Method Pattern)又简称模板模式,属于行为型设计模式,它主要是在父类中定义一个统一的操作的算法框架,而将具体实现延迟到子类中,使得不同的子类按照父类已定义好的框架结构进行实现不同的算法细节。这类行为的思想实现也就是控制反转(Inversion of Control,缩写IOC)的体现。例如现实场景中煮饭,所有人都公知同样的步骤:洗米、放水和煮法,不同的人或不同的工具煮出来味道也是会不一样的。2 实现模板方法模式一般包含了2个角色,分别是:抽

2020-11-04 10:04:56 251

原创 行为型设计模式(四) 之 迭代器模式可让聚合对象统一遍历

1 定义迭代器模式(Iterator Pattern)属于行为型设计模式,它主要是为了解决在不暴露对象内部表示情况下,提供一种方法可顺序来访问一个聚合对象里的各个元素,简单地说就是为一个聚合对象提供对外可遍历它里内元素的方案。像我们常使用的for语句中,i++每次循环自增迭代到下一个元素,将这种循环变量的作用抽象后通用化就是迭代器模式。正如有些场景下我们并不想关心一个聚合对象内部使用是List、set还是Map的集合存储方式,只想使用统一的遍历方法对此聚合对象进行内部元素的遍历。例如现实场景有一学校,局

2020-11-04 10:01:18 220

原创 行为型设计模式(三) 之 任务审批和权限的体现可使用责任链模式

1 定义责任链模式(Chain of Responsibility Pattern)又叫职责链模式或者职责连锁模式,属于行为型设计模式,它主要是为请求者进行发送请求动作时创建一个接收的对象链,而链上每一个接收者都包含着下一个接收者的引用,如果当前接收者不能处理指定的请求,便将该请求传递给下一个接收者,依此类推直到有一个接收者能为其处理为止,而请求者也并不知道发起的请求会在链上哪个接收者最终处理。例如现实场景,我们工作中需要请假,假如请假天数是3天内是部门经理审批;如果5天内是先部门经理审批,接着是总监审

2020-11-04 09:59:02 422

原创 行为型设计模式(二) 之 复杂条件封装来描述工作流变化常用状态模式

1 定义状态模式(State Pattern)属于行为型设计模式,它主要是为了解决在当一个对象状态决定该对象的行为且该状态的条件表达式过于复杂时,把状态的判断逻辑进行单独封装为不同的状态,正如工作流中通过每个节点的状态来决定跳转下一个节点的流程。例如现实场景,我们工作中需要请假,在OA系统上走流程,假如请假天数是3天内是部门经理审批,然后是行政登记;如果5天内是先部门经理审批,接着是总监审批,最后是行政登记;如果10天内最终还要老板审批,最后行政登记,这里根据请假的天数决定了审批流程,其每个审批节点就是

2020-11-04 09:55:42 394

原创 行为型设计模式(一) 之 策略模式擅长算法的封装与切换

1 定义策略模式(Strategy Pattern)属于行为型设计模式,它主要对一系列可供选择的算法进行单独封装,不同的算法实现不同的过程,但最终完成着一样的结果。例如现实场景中,商场促销活动中有着多种方案,如:满300减30、满3件打7折等,这些方案都可认为是一种对商品收费的算法,最终的目的都是为了结账。我们消费者根据商品价格和数量可以自由选择哪一种的方式进行结账从而达到价格最大的优惠。2 实现策略模式一般包含了3个角色,分别是:上下文环境(Context):用来操作策略的上下文环境。例如

2020-11-04 09:52:21 197

原创 结构型设计模式(七) 之 多维度分离成接口的桥接模式

1 定义桥接模式(Bridge Pattern),又叫柄体(Handle and Body)模式或接口(Interface)模式,属于结构型设计模式之一。它主要用于当对象存在多个维度特征时将维度分离出来,让抽象部分和实现部分分离,使每个维度可以独立扩展。它是继承关系的一个替代方案,且在特定场景中比使用继承生成子类更具有灵活性和可扩展性。例如现实场景中,我们要去吃一碗面,菜单上标着有牛肉面、鸡肉面,然后可以根据自己喜爱搭配辅食有香肠和鸡蛋。想象一下,如果使用继承来实现的话,会存在4种继承于面条的具体口味的

2020-08-27 09:59:20 452

原创 结构型设计模式(六) 之 一致对待树结构的组合模式

1 定义组合模式(Composite Pattern),又叫部分整体模式,属于结构型设计模式之一。它主要用于将一组相似的对象作为一个单一对象来看待,再依据树形结构来组合对象,用来表示部分以及整体层次,使得调用者可以使用一致的方法操作单个对象或组合对象。例如现实场景中,一个公司里面包含了人事部、技术部、业务部和分公司等,而分公司里的组织结构也同样具有人事部、技术部、业务部等部门。总公司部门和分公司部门都可以理解为属于公司统一管理,是公司的部门或叫旗下部门,这其实就是整体与部分可以被一致对待的表现。2

2020-08-27 09:56:36 286

原创 结构型设计模式(五) 之 享元模式是池技术的表现

1 定义享元模式(Flyweight Pattern)属于结构型设计模式之一,它主要是使用共享对象有效地避免了创建过多的性质相近的对象,从而降低内存的占用,提高程序的性能。它也是池技术的重要实现方式,正如常量池、数据库连接池、缓冲池等都是享元模式的应用。享元模式一般结合工厂模式一起使用,在获取对象时会尝试使用共享的已存在的同类对象,如果未能匹配到对象才再去创建新对象。这些对象分为两个部分:内部状态和 外部状态:内部状态,是对象内部可共享的信息,它并不会因外部环境改变而发生改变。外部状态,是对象外

2020-08-27 09:52:08 314

原创 结构型设计模式(四) 之 API的封装请用外观模式

1 定义外观模式(Facade Pattern)又叫门面模式,属于结构型设计模式之一。它主要用于当存在多个复杂的子系统需要调用时,通过引用一个外观角色来进行组合性封装来简化对外调用的入口,降低子系统与调用者的耦合度和降低调用者使用成本,一般常用于对SDK或者API的封装。例如实现场景中,我们使用一些电脑优化工具软件进行优化时,软件一般提供了:垃圾清理、病毒查杀、注册表清理、大文件查找等功能,而一般也会直接提供了一个充当外观角色的一键优化入口,当我们触发一键优化时,工具便会自动帮我们执行内部相应的子功能进

2020-08-27 09:49:51 497

原创 结构型设计模式(三) 之 代理模式就是桥梁连接调用

1 定义代理模式(Proxy Pattern)又名委托模式,属于结构型设计模式之一,它主要用于对现有一个对象提供一个代理对象,并由代理对象控制原现有对象的访问或访问前后增加相应逻辑。比如某些情况下,一个对象不适合直接引用另一个对象,而可以通过在引用和被引用之间加入一个代理对象明来作为一个桥梁连接调用。例如现实场景中,某品牌官方厂家可以卖商品,而它拥有着一些专卖店,我们想买它的商品时一般不会直接跑到厂家那里买,而是通过它的专卖店去买,而且说不定专卖店还常有优惠活动,这里的专卖店就是起到一个代理的作用,其实

2020-08-27 09:47:53 138

原创 结构型设计模式(二) 之 装饰者模式可给对象一层层加工

1 定义装饰者模式(Decorator Pattern)又叫包装模式属于结构型设计模式之一,它主要用于动态地给一个对象增加一些额外扩展的功能,它是继承关系的一个替代方案,且在特定场景中比使用继承生成子类更具有灵活性和可扩展性。例如现实场景中,我们要去点一碗牛肉面,通过加不同的配料如鸡蛋、香肠、酸菜、香葱、香菜等最终一碗普通面条通过根据你的口味不同的搭配后变成一碗你喜欢的面条。想象一下,鸡蛋+酸菜是一种搭配方式,鸡蛋+酸菜+香葱又是一种新的搭配方式,虽然最终成品离不开是一碗面条,但总不能每一种搭配都要创建

2020-08-27 09:43:49 260

原创 结构型设计模式(一) 之 适配器模式使接口兼容更好

1 定义适配器模式(Adapter Pattern)属于结构型设计模式之一,它主要用于处理不兼容的两个接口的协同工作,使一个接口转换成期望的另一个接口。例如现实场景中,手机充电器便是一个适配器,它将220V的电压转换成我们手机需要的5V电压、又例如读卡器也是一个适配器,它将SD卡转换成电脑的USB插口。在代码使用上,适配器模式其实就是增加一个适配器的类作为中间类将不兼容的接口转变成调用者需要的接口。2 实现适配器模式一般包含3个角色,分别是:被适配者(Adaptee),就是原有已存在的需要适

2020-08-27 09:40:58 382 1

原创 创建型设计模式(五) 之 原型模式就是克隆对象

1 定义原型模式(Prototype Pattern)属于创建型设计模式之一,它主要用于当直接创建对象的代价较大时对已有对象进行克隆从而节约性能成本。例如一个对象需要高代价的IO或访问数据库之后才能被创建出来,像这情况类初始化需要消化非常多的资源,那么我们一般可以将已经创建出来的对象作为原型进行缓存,在下一次再需要同样对象时对其进行克隆,克隆过程中原类的构造方法不会被执行。原型模式很少单独出现,一般是跟工厂模式进行配合,先将原型对象进行初始化缓存,然后通过工厂提供给调用者。2 实现我们沿用工厂模

2020-06-19 16:41:42 241

原创 创建型设计模式(四) 之 建造者模式专治多参的复杂对象的创建

1 定义建造者模式(Builder Pattern)属于创建型设计模式。又有人称为创建者模式、生成器模式、构造器模式等,它主要用于复杂对象的创建。那什么是复杂对象呢?其实简单地说就是类中构造方法有多个重载的版本和最终构造方法参数特别多的类的对象或者构造方法少但是属性特别多的类的对象。因为这种类需要外部传入相当多的参数来决定类的最终表现,所以它是复杂的。使用者在创建对象时需要决定使用哪个构造方法,然而里面的参数相当多还得搞清楚这些参数的含义,或者构造方法简单但需要多行代码来设置相当多的属性才能完成最终想要

2020-06-19 16:36:38 912

原创 创建型设计模式(二、三) 之 工厂方法和抽象工厂模式的演变和适用场景

1定义工厂模式(Factory Pattern)属于创建型设计模式。如其名它提供了一种像实际场景中像加工厂的形式来进行创建类对象,其过程不会对客户端暴露创建逻辑,并且是通过使用共同的接口来返回新创建的对象。一般工厂模式双可分为简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)和 抽象工厂模式(Abstract Factory),其中严格来讲简单工厂不算是一个标准的的设计模式,但是工厂方法和抽象工厂都是通过简单工厂演变而来。2 简单工厂模式在介绍简单工厂模式

2020-06-19 16:31:31 468

原创 创建型设计模式(一) 之 正确使用单例模式使对象长存

1定义单例模式(Singleton Pattern)属于创建型设计模式之一,它应该算上是我们日常开发里最常用到的设计模式之一。其使用上就是让在当前进程下指定的类只被初始化一次,并且一般会一直保存于内存中,保证了全局对象的唯一性。比如线程池、缓存、日志等等都常常被设计成单例模式来使用。1.1 那单例和静态类的区别常有人拿单例和静态类作比较和混淆他们的使用场景,因为它们都是用于全局的访问。其实它们的区分还是很简单的:静态类:不具备面向对象的特性,不支持延时加载,一般用于工具类,静态的绑定是在编译

2020-06-19 16:21:34 2398

原创 Android开发者快速上手Kotlin(十) 之 Android工程实战和Kotlin总结展望

接《Android开发者快速上手Kotlin(九) 之 Kotlin与Java混合开发》文章继续。17 Android工程实战我们在前面一系列九篇文章已经对Kotlin的语法知识进行了跟Java对照式的学习,如果你坚持看完前面的文章恭喜你已经具备了Kotlin语言的基本开发能力了。当然学习一门语言并非一两天的事情,就算你把语法都烂透于心但在实际开发中总会还遇到一些特殊的情况,这也是我们程序开发者的日常与乐趣。回来正题,今天的文章是本系列的最后一篇,主要是介绍我们Android开发者在使用Kotl

2020-05-18 11:39:34 583

原创 Android开发者快速上手Kotlin(九) 之 Kotlin与Java混合开发

接《Android开发者快速上手Kotlin(八) 之 协程官方框架Channel、Select和Flow》文章继续。16 Kotlin与Java混合开发我们在前面介绍语法文章里或多或少有提到过可以使用一些如@JvmXX的注解来解决默认参数、静态成员等Kotlin和Java的兼容问题以及属性、空指针安全、反射等语法的区别和使用。今天我们就来进行一个全面的总结关于Kotlin和Java共存混合开发的各种情况。16.1 属性读写其实Java中并没有属性的概念,它并不是语法的规则,只是通过Gett

2020-05-15 16:38:26 2013

原创 Android开发者快速上手Kotlin(八) 之 协程官方框架Channel、Select和Flow的使用

接《Android开发者快速上手Kotlin(七) 之 协程官方框架初步》文章继续。14 协程官方框架Channel、Select和Flow 14.1 ChannelChannel我们一般翻译成叫通道,用于多个协程之间进行数据相互传输,多个协程允许发送和接收同一个Channel的数据。它类似于线程任务队列BlockingQueue + 挂起函数的支持,因为如果通道支持缓存的话,那么它实质上就是一个队列。我们发消息和接收消息都是挂起函数,挂起取决于Channel的状态,如果Channel已经满了.

2020-05-14 19:34:25 2407

原创 Android开发者快速上手Kotlin(七) 之 协程官方框架初步

接《Android开发者快速上手Kotlin(六) 之协程上下文和拦截器》文章继续。13 协程官方框架初步经前面两篇文章介绍了协程的概念和语言级别的语法后,相信你已经对协程有了一个大概的认识了。今天这篇文章主要是以应用层面来介绍Kotlin官方协程框架——kotlinx.coroutines。如果我们平时日常开发使用的是我们之前介绍的语言级别语法那是非常难用的,甚至你可能还会觉得不如使用以前Java中使用线程+接口回调的方式还比它好,而官方提供的协程框架kotlinx.coroutines它是基于语

2020-05-09 15:19:58 2978

原创 Android开发者快速上手Kotlin(六) 之 协程上下文和拦截器

接《Android开发者快速上手Kotlin(五) 之 初只协程》文章继续。12 协程进阶我们在完成了上一篇文章的学习后,你是不是已经大概清楚协程是什么和怎样使用了。但是你可能还存在着疑惑,既然协程没有异常的能力,使用过程中还需要自己去创建线程,那为什么不直接使用线程直截了当,还要绕一个大圈写那么多语法来完成一个看似高端却没什么实际意义的玩意?其实大多数人在初学习协程时都会存在这样的疑问,...

2020-04-24 20:03:17 1072

原创 Android开发者快速上手Kotlin(五) 之 协程语法初步

接《Android开发者快速上手Kotlin(四) 之 泛型、反射和注解》文章继续。11 初识协程11.1简介协程并非什么新产物,它是几十年前就已存在的概念,但兴起于近些年。Kotlin作为一门朝阳语言,它跟其它近些年新兴语言如:go、Lua、python等,一样都引入了 Coroutine(协程) 的语法支持。在Java并不存在协程的语法,我们在过去使用Java开发过程中,若想要...

2020-04-22 18:09:57 1075

原创 Android开发者快速上手Kotlin(四) 之 泛型、反射、注解和正则

接《Android开发者快速上手Kotlin(三) 之 高阶函数和SAM转换》文章继续。8 泛型8.1 泛型的声明Kotlin中的泛型基本上跟Java是一个思路的,只是在使用上有一点点区别。如:fun <T> func1(a: T, b: T): T { // 单个泛型参数的方法的声明 return a}fun <T, R> fu...

2020-04-17 15:44:58 2910

原创 Android开发者快速上手Kotlin(三) 之 高阶函数和SAM转换

接《Android开发者快速上手Kotlin(二) 之 面向对象编程》文章继续。6 高阶函数Kotlin中的高阶函数其实就是跟高等数学中的高阶函数一个概念,就是函数套函数,即f(g(x))。什么意思呢?其实很好理解,就是将函数本身看作一种类型,作为别的函数的参数传入或者作为返回值返回。我们在前面其实就已经接触过高阶函数,因为:arg.forEach(::println)中,forEach本...

2020-04-17 15:38:56 708

原创 Android开发者快速上手Kotlin(二) 之 面向对象编程

接《Android开发者快速上手Kotlin(一) 之 简介和基本语法》文章继续。5面向对象编程在Kotlin中,所有的类都继承于Any,这就像Java中的Object一样。类的实例化不需要使用new关键字。5.1 包Kotlin中包跟Java中包是一样,但要注意一点的是,包名可以不跟文件夹名。5.2 类Kotlin的类要注意几点:使用关键字constructor来声明构造...

2020-04-17 14:23:23 996

原创 Android开发者快速上手Kotlin(一) 之 简介和基本语法

1 前言在开始语法学习Kotlin之前,先说说本系列文章内容的大概的定位,本系统文章只是针对Android开发者快速上手Kotlin语言,大多时候在语法的介绍时会跟Java语言作比较,一些基本上跟Java差别不大的地方可能并不会介绍到,所以如果你并不想花太多时间去阅读枯燥无味的官方文档又希望快速上手的话,那恭喜你是来对地方了。同时并建议,如果你是没有Java语言基础的同学,对不起,这篇文章可能...

2020-04-17 11:42:52 1133

原创 Android网络编程(十四) 之 Socket与NIO

1 简介NIO(Non-Blocking I/O或叫New I/O)是一种同步非阻塞的I/O模型,主要用于服务端解决高并发或者大量连接的情况的IO处理。它是JDK1.4中引入的,位于java.nio包中,主要用于弥补原来同步阻塞I/O(Blocking I/O或叫BIO)的不足。在NIO出现之前大多服务端主要使用BIO通过新建线程的方式来解决并发请求,如上一篇博文《Android网络编程(十三...

2020-01-21 16:00:24 1436

原创 Android网络编程(十三) 之 Socket和长连接

1 Socket的简介Socket字面翻译是“插座”,通常也称作“套接字”,是对TCP/IP的封装的编程接口。Socket把复杂的TCP/IP 协议族隐藏在Socket 接口后面。Socket 用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过Socket向网络发出请求或者应答网络请求。就像一台服务器可能会提供很多服务,每种服务对应一个Socket,并绑定到一个端口上,不同的端口对应...

2019-12-31 20:13:52 2022

Socker长连接Demo.rar

用于博文https://blog.csdn.net/lyz_zyx/article/details/103788305《Android网络编程(十三) 之 Socket和长连接》中演示Socket长连接Demo

2020-12-29

Kotlin的Android实战Demo.rar

Kotlin的Android实战Demo,文章《https://blog.csdn.net/lyz_zyx/article/details/106189740》的示例

2020-05-18

Socket与NIO的Demo.rar

用于博文https://blog.csdn.net/lyz_zyx/article/details/104062815《Android网络编程(十四) 之 Socket与NIO》中演示Socket与NIO使用的Demo

2020-03-03

JNI入门Demo3.0

JNI入门Demo3.0,用于演示JNI中是如何动态注册Native函数。

2019-03-20

JNI入门Demo2.0

JNI入门Demo2.0,用于演示JNI中是如何反调用Java方法的

2019-03-08

JNI入门Demo1.0

JNI入门Demo1.0,用于演示Java代码是如何调用到C++代码

2019-03-08

完整的Android插件化入门工程

这是完整的Android插件化入门工程,当中介绍了宿主和插件的代码合并、资源合并 以及宿主如何调用插件中的Activity的两种方法。

2018-12-11

支持输入工程资源id的Mac版aapt

这是一个通过修改aapt源码进行扩展,支持通过关键字“--PLUG-resoure-id”传入工程资源id的Mac版的aapt文件。

2018-12-07

支持输入工程资源id的Windows版aapt

这是一个通过修改aapt源码进行扩展,支持通过关键字“--PLUG-resoure-id”传入工程资源id的Windows版的aapt文件。

2018-12-07

插件化入门Demo1

这是插件化入门Demo1,介绍了宿主是如何加载起插件化中的代码

2018-12-03

Android中AIDL的Binder连接池Demo

Android中AIDL的Binder连接池Demo。可通过该真实的实例来真正了解实际开发过程中AIDL的Binder连接池的使用。

2018-10-15

Android中AIDL的使用Demo

Android中AIDL的使用Demo。

2018-10-15

Android自绘制Loading控件

Android自绘制Loading控件的Demo。可通过该真实的实例来真正了解实际开发过程中是如何自定义自绘制一个View

2018-01-10

Android中自定义View之流式布局

Android中自定义View之流式布局的Demo,代码中关键步骤并有注释原理解说,轻松掌握自定义View的onMeasure和onLayout的实现

2017-10-10

Android中实现JobScheduler的Demo

Android中实现JobScheduler的Demo

2017-07-05

Android中实现帐户同步Demo

Android帐户同步Demo

2017-06-22

使用Volley上传文件到腾讯云

使用Volley的表单方式将上传文件到腾讯云示例

2017-06-12

空空如也

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

TA关注的人

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