自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android Handler详解

1.前言Handler是Android最重要的知识点,无论你是初级开发者还是大牛,Handler都是你必须要了解的。它的作用是线程间通讯,由于Android中只允许在主线程中更新UI,而且又有ANR机制,主线程中不应该处理耗时问题.那么在通过网络接口获取数据的时候就一定需要子线程中操作,然后通知主线程去更新UI。于是Android中提供了Handler机制去解决这个问题。当然这也是几乎所有And...

2019-12-31 00:07:43 1707 2

原创 移动端接口开发规范

1.API命名规范1.1 URL提供给外部渠道使用(PC、app、H5、第三方合作平台)app:/app/refund/create运营系统:/operation/refund/create商家端:/merchant/refund/create依次类推 xxx渠道:/xxx/controllerName/actionName**范例:**https://api.weibo.com/2/friendships/friends.json**当前:**http://192.16

2020-07-22 10:42:33 1958

原创 Room数据库存储自定义数据类和List类型以及碰到的一些坑

Room数据库是Google官方Jetpack框架中推荐的数据库组件,虽然其速度和不使用Sqlite的Realm数据库比还是有一些差距,但是其可以直接返回LiveData对象或者RxJava的Observable对象,使用起来十分方便。之前我写过两篇有关于Room的博客LiveData结合Room数据库使用以及线程问题:https://blog.csdn.net/weixin_44666188/article/details/105500779Android使用AIDL共享Room数据库:https

2020-05-25 14:06:25 4988 5

原创 基于UDP广播的局域网匿名聊天APP

一天天太能心血来潮,昨天在看UDP的时候突然手痒想写一个基于UDP的聊天app,想着挺简单结果搞了很久才搞出来。话不多说,上代码。这个项目使用Jetpack框架搭建,Kotlin编写。1. UDP通信工具类import android.text.format.Formatterimport android.util.Logimport com.psychedelic.udpchat.ChatEntityimport com.psychedelic.udpchat.FROM_OTHERSimpo

2020-05-10 15:28:05 985

原创 RxJava在Android中的使用与扩展

虽然现在写RxJava可能都算考古了,但是毕竟是Google爸爸都推荐使用的框架,还是写一哈吧。以前对于RxJava其实也都是看别人的博客,也没有抽出时间好好去整理一下知识点,今天就用这篇博客巩固下之前的知识,查缺补漏吧~RxJava1. 简介1.1 官方介绍1.2 依赖1.3 Hello World 示例代码1.4 RxJava3 新特性1.5 技能树2. RxJava中使用的设计模式3. ...

2020-05-07 23:37:40 3116

原创 面试时被问到什么是面向对象OOP?看这篇就够了

什么是面对对象?这个问题经常是面试自我介绍之后的开场问题。面试官问这个问题的时候主要是看你对编程基本思路的了解,顺便在你答题的时候整理自己之后的面试思路。刚入行的同学们常常答不好这个问题,觉得这个问题大而空,网上看的介绍也比较抽象,往往会不重视这个问题,导致面试时一开始就处于被动局面。1. 概念面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以...

2020-05-05 00:17:52 3535 3

原创 Android指纹校验与生物识别的使用

Android在6.0的时候提供了官方的指纹模块API,最近在使用的时候发现以前的FingerprintManager已经被标识为过时了。Android 8.0 整合了一套生物识别模块,指纹识别使用BiometricPrompt来调用。官方文档:FingerprintManager官方文档:BiometricPrompt写代码用过时API当然没排面啦,于是我转用了BiometricPro...

2020-05-01 19:15:03 1424

原创 聊聊从古至今都是如何加密的~

今儿心血来潮想讲一下加密解密,因为这篇想发到微博上给麻瓜筒子门看所以主要是概念介绍用而不是代码~1.古代保密技术古希腊剃头,这个好像历史书上就有,把头发剃光光,然后写在头上,长出头发再去送信,到地方再剃头。斯巴达人发明了“塞塔式密码”,即把长条纸螺旋形地斜绕在一个多棱棒上,将文字沿棒的水平方向从左到右书写,写一个字旋转一下,写完一行再另起一行从左到右写,直到写完。解下来后,纸条上的文字消息杂...

2020-04-24 18:05:23 5283 1

原创 Android同步方法中异步操作获取返回值。

大家都知道Android中UI操作必须放在主线程中,耗时操作比如网络请求和数据库查询需要放在子线程中。为此Android提供了像Handler和AsycTask这样的框架来给开发者使用。通常情况下我们都是在子线程中耗时获取数据后再通知给主线程去更新UI,但也有些其他的情况。我曾经有一次面试的时候被问到一个问题,子线程中进行耗时操作,主线程如何同步获取这个子线程执行的结果?也就是实现一个异步操作的...

2020-04-18 21:16:37 5122

原创 Android使用AIDL共享Room数据库

什么是AIDL:AIDL(Android Interface Definition Language),翻译成中文就是安卓接口定义语言的意思,是用于定义服务端和客户端通信接口的一种描述语言。其主要作用是IPC(Android进程间通讯),简单的来说就是AIDL可以让一个APP使用另外一个APP的Service,使得两个或者多个APP之间可以信息交互,使得多个APP之间只需要使用一套代码,这样对于...

2020-04-17 16:39:24 2619

原创 LiveData结合Room数据库使用以及线程问题

在LiveData的官方文档中有提到LiveData可以和Room数据库一起使用也就是说Room查询时可以直接返回一个LiveData对象,给这个LiveData对象添加观察者之后只要数据库数据发生改变都可以收到回调。Room的使用不在这里说了,直接贴上代码添加依赖: androidTestImplementation "android.arch.persistence.room:...

2020-04-15 00:37:50 8503 4

原创 Android Jetpack框架-LiveData简单使用

官方介绍:LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。如果观察者(由 Observer 类表示)的生命周期处于 STARTED 或 RESUMED 状态,...

2020-04-13 21:57:30 1483

原创 Android广播的分类与使用

广播在Android开发中的使用十分广泛,其功能由发送者和接收者两部分组成,与现实中的广播类似,广播台通过信号塔发射广播信号(发送广播),用户通过收音机(广播接收者)来接收广播内容。其中广播接收者是Android的四大组件之一。1.广播的基本使用:1.1 创建并发送广播:广播发送时也是使用Intent作为载体的 Intent intent = new Intent(); ...

2020-04-11 23:53:09 2491

原创 升级Android Q API 29File无权限问题

最近重构之前的项目,target sdk 干脆就设置到29了,结果遇到了之前没有遇到的一些问题,在这总结一下。1是使用File去创建图片文件的时候一直不成功,看log是显示没有权限,但是我的清单文件中已经申明了相关权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ...

2020-03-19 16:05:09 2008

原创 Android禁止截屏

1.禁止截屏还是这两天看剧的问题,花了25搞了超前点播,发现超前点播只能在移动端使用,应该是为了版权问题。在Android设备上发现播放的时候无法截图,录屏是黑色的。这让我想起了安全键盘的问题。前几个月我的手机屏幕摔了一下,外屏没有事但是内屏漏液了,屏幕全黑,为了把数据导出来我用AI唤醒无线投屏用笔记本电脑看的手机屏幕,还挺顺利的,但是当我想要恢复出厂设置的时候需要输入云端密码,这个时候Edit...

2020-02-01 01:29:46 2668

原创 啤酒瓶盖酒瓶兑换问题

昨儿看爱情公寓5,剧里面偷了道题目啤酒2块钱一瓶,4个瓶盖或者2个空瓶能再换1瓶啤酒,问10块钱最多能喝多少瓶啤酒。这道题明显是一道递归算法题,弹幕里很多人算出来是15瓶,但是赵海棠最后得出的答案是20瓶。其实都是正确答案,15瓶是指所有的啤酒都是自己买的情况下,最后剩下3个瓶盖和一个空酒瓶,喝了15瓶啤酒。而20瓶的答案是通过先预支20瓶啤酒得出的。预支20瓶啤酒喝掉后剩下的瓶盖和酒瓶可...

2020-01-21 19:53:26 7685 3

原创 Android Jetpack框架-Lifecycles

介绍Lifecycles是Jetpack框架组件之一,使用观察者模式追踪Activity或者Fragment的生命周期,以避免在Activity或者Fragment的生命周期方法中加入太多逻辑,降低代码耦合性,去除重复代码并且防止内存泄漏。官方介绍:生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往...

2020-01-19 16:17:42 1277

原创 千兆家庭组网方案

1.前言这几年网速提升可太快了,当初我刚拥有第一台电脑的时候还是1M网,下一个几百兆的游戏得挂一天才能下完。现在40G的游戏10分钟搞定。目前家里办理的宽带套餐基本都是100M以上,但是很多人都发现自己的网速最多只有9M/S,这是一个很大坑,下面我来介绍一哈如何解决这个问题。2.网速不达标的原因当你办理了200M套餐,但是网速达不到200M,打电话给运营商运营商远程检测会告诉你他们的网络没有...

2020-01-17 14:42:39 17344 2

原创 Android小窗口模式,picture-in-picture(PIP画中画)的使用

1.介绍Android8.0的时候推出了画中画模式,可以让Activity缩小显示在其他Activity上方。当初我维护的项目本身自己实现了这个功能,Android加入画中画之后两个功能并行,互相交互的时候出了一大堆问题。现在几乎所有的视频软件都加入了这个功能。使用方法十分简单,但是需要处理好AudioFocus的问题。2.参数介绍在Android 8.0时候,只需要调用Activity...

2020-01-12 20:53:45 8677 4

原创 状态模式

1.介绍状态模式中的行为时由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但他们的目的,本质却完全不一样。状态模式的行为是平行的、不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。2.定义当...

2020-01-12 14:20:39 1180

原创 迭代器模式

1.介绍迭代器模式又称为游标模式,是行为设计模式之一。迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List,Map、数组等,我们知道对容器对象的访问必定会涉及到遍历算法,我们可以将遍历的方法封装在容器中,或者不提供遍历方法。如果我们将遍历的方法封装到容器中,那么容器类会承担太多功能。容器类不仅要维护自身内部的数据元素而且还要对外提供遍历的接口方法,因为遍历状态的存储...

2020-01-10 15:34:02 1168

原创 写了一个不太成功的“流氓”app~

前言昨天闲来无事想试试语音识别,本来想用讯飞的SDK的,但是我用百度搜索的,百度sdk第一条,我就偷个懒用了百度的SDK,实现起来果然很懒。然后突发奇想反正是个demo,不如恶搞一下,弄成只有念出特定的话才能退出APP。本来认为重点是看百度语音识别SDK文档,结果实际上手才发现不给用户退出才是大坑。Android早几年的版本十分容易实现,然而8.0之后权限管理十分严格,各大厂商客制化的时候变得更...

2020-01-08 16:11:51 2325

原创 EditText软键盘遮挡UI的一些坑

之前写一个类似微信聊天界面的时候碰到了这个坑,本来认为EditText这种基础控件没啥好说的,没想到被软键盘坑了,网上找了很多方法都没有用,想了想还是整理一下。碰到的问题很常见,EditText获取焦点后弹出软键盘遮挡住了聊天记录UI。如下图所示:当时想着这个问题很好解决嘛,不就是设置activity的windowSoftInputMode属性嘛? android:windowSoftI...

2020-01-06 17:28:58 1447 1

原创 Android屏幕旋转问题

Android Activity横竖屏切换具体使用Android面试中关于生命周期肯定会问到Activity在旋转时生命周期的变化,基本上大家都知道如果不设置android:configChanges="orientation|keyboardHidden|screenSize"Activity会重新执行一遍生命周期,也就是Activity会销毁再Resume。如果设置了上述属性,那么横...

2020-01-05 15:38:43 1939 2

原创 中介者模式

1.介绍中介者模式,也称为调解者模式或者调停者模式。生活中的可以使用租房来举例,没有中介的时候,租房需要房客和房东对接,双方都不专业,一套房子就需要一个房东和一个房客,那么很多套房子呢。很显然会产生大量一对一的关系相互耦合。而有了中介之后,房东和房客都只需要和中介协商,中介手中有大量房源,也更加专业,使得很多一对一的关系变成了一对多的关系。2.定义当对象之间的交互操作很多且每个对象的行为操作...

2019-12-29 23:53:57 1454

原创 装饰模式

装饰模式1.介绍装饰模式,也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地拓展对象的功能,同时它也是继承关系的一种替代方案之一,在现实生活中你也可以看见很多装饰模式的例子。从人来说,人需要各式各样的一桌,不管穿着什么样,但是对于个人的本质来说是不变的,充其量只是在外面披上一层衣物而已,这就是装饰模式,装饰物也许各不相同但是装饰的对象本质是不变的。2.定义动态地给一个...

2019-12-27 20:18:33 1390

原创 模板方法模式

模板方法模式1.介绍在面向对象开发过程中,通常会遇到这样的问题,我们知道一个方法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变的,例如,执行程序的流程大致如下:检查代码的正确性连接相关的类库编译相关的代码执行程序对于不同的程序设计语言,上述4个步骤都是不一样的,但是它们的执行流程是固定的,这类问题的解决方案...

2019-12-27 16:04:35 1171

原创 桥接模式

桥接模式1.介绍桥接模式也称为桥梁模式,是结构型设计模式之一。在现实生活中大家都知道“桥梁”是连接河道两岸的重要交通枢纽,简而言之其作用就是连接河的两岸,而桥接模式与现实中的情况很相似,也是承担着连接“两边”的作用。2.定义将抽象部分与实现部分分离,使他们都可以独立地进行变化。3.使用场景从模式的定义中大致可以了解到,这里“桥梁”的作用其实就是连接“抽象部分”与“实现部分”,但是事实上...

2019-12-26 14:20:57 968

原创 观察者模式

1.介绍观察者模式是一种使用评率非常高的的模式,它最常用的地方就是GUI系统、订阅-发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品需求的更改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时GUI系统需要一套机制来应对这种情况,使得UI层与具体逻辑解耦...

2019-12-21 21:18:17 1158

原创 策略模式

1.介绍在实际开发中常常碰到一种情况:实现某一功能可以有多种算法或者策略,根据实际情况选择不同的算法或者策略来完成该功能。例如,排序算法,可以使用插入排序、并归排序、冒泡排序等。对于这种情况,常规的方法是将这些功能都放在一个类中,以排序为举例,创建一个Sort类,为不同的排序创建不同的方法,使用的时候再使用条件判断语句去选择调用不同的方法。但是这样写这个类会变得十分臃肿,维护成本高,也容易发生...

2019-12-21 16:00:27 922

原创 Build建造者模式

建造者模式Builder模式是一步一步创建一个复杂对象的创建型模式。它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。一个复杂的对象有很多组成部分,如汽车,有车轮,方向盘,发动机,还有各种小零件等,如何将这些部件装配成一辆汽车,这个过程很漫长复杂,对于这种情况,为了在构建过程中对外部隐藏实现...

2019-12-18 00:10:22 1392

原创 Kotlin基础梳理

1.Kotlin基础1.1基本语法kotlin中的;可以省略,但没有python严格的缩进规则定义变量:变量前用var或者val修饰,var代表可重新赋值变量,val相当于final修饰的变量,只能赋值一次。不需要把变量类型写在前面,而是放在:后Int n = 30;//Java代码var n: Int = 30 //Kotlin代码val j = 3j = 4//这样写会报错,...

2019-12-12 19:42:47 1208

转载 Android面试整理,附答案

Android基础1. 四大组件是什么?Activity,Service,BroadcastReceiver,Content Provider2. Activity 的生命周期?4. Activity 之间的通信方式?Intent借助类的静态变量借助全局变量/Application借助外部工具– 借助SharedPreference– 使用Android数据库SQLite...

2019-12-12 01:24:05 2684

原创 Java基础梳理(二)

Java基础梳理(二)Staticstatic方法static修饰内部类静态代码块Final常量设计和常量池常量:一种不会修改的变量常量池创建方式常量式new对象不可变对象和字符串不可变对象(Immutable Object)如何创建不可变对象不可变对象的优点不可变对象的缺点Java字符串Java常量池字符串的加法Staticstatic变量只依赖于类实现(通过类即可访问),不依赖对象实例存在...

2019-12-11 16:26:17 1081

转载 Java面试

Java基础1. 什么是面向对象(OOP)?面向对象编程是使用类,对象,继承性,多态性,封装性和抽象的一种程序设计方法。首先我们要区分一下“基于对象”和“面向对象”的区别。基于对象,通常指的是对数据的封装,以及提供一组方法对封装过的数据操作。面向对象,则在基于对象的基础上增加了多态性。所谓多态,就是可以用统一的方法对不同的对象进行同样的操作。什么是面向对象(OOP)?2. 什么...

2019-12-11 16:09:47 1157

原创 Java网络编程

Java网络编程OSI七层模型传输层UDPTCP三次握手四次挥手实例:HttpJson解析8583报文协议Java编程中主要用到的网络协议是TCP和UDP,这两条协议都是属于计算机网络体系结构中的运输层协议。OSI七层模型OSI(Open System Interconnect),即开放式系统互连。是ISO(国际标准化组织)在1985年研究的网络互连模型。OSI定义了网络互连的七层框架(物...

2019-11-04 23:18:27 1094

原创 Java多线程和并发

Java多线程和并发多进程多进程概念多进程优点多进程缺点多线程多进程和多线程对比Java多线程创建Java多线程启动多线程实现对比多线程信息共享线程类通过共享变量在多个线程中共享消息多线程信息共享问题变量副本问题的解决方法关键步骤加锁限制多线程管理线程阻塞和唤醒sleep()wait()notify()/notifyAll()join()yield()interrupt()线程被动地暂停和终止线程...

2019-10-29 18:32:07 1752

原创 Java基础梳理(一)

Java基础梳理Java类结构和main函数类(Class)的定义main函数基本类型booleanbyteshortintlongfloatdoublechar补充运算符循环结构whiledo...whileforbreakcontinue如何退出多重嵌套循环标号1.使用带标号的break语句2.在内层循环中添加外层循环的限制3.使用Exception跳出循环面对对象什么是对象对象和类的关系什么...

2019-10-19 20:17:04 1176

iso8583-Java-master.rar

Java实现ISO 8583报文协议封包。 ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。 8583包前面一段为位图,用来确定包的字段域组成情况。 其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数据的基础。在POS机的开发上时经常要用到,例如回头客会员管理系统在POS机上的应用就是采用8583报文。

2020-05-07

空空如也

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

TA关注的人

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