自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bdmh的专栏

QQ:515840062

原创 Android:ArrowKeyMovementMethod

我们之前在Android:MovementMethod,BaseMovementMethod和Android:LinkMovementMethod、ScrollingMovementMethod两篇文章中讲过TextView的两种MovementMethod的工作过程,这两种都是针对TextVie...

2020-04-09 13:58:49 72 0

原创 Java:通过字节码看if-else和switch-case
原力计划

条件语句是我们使用非常频繁的语法之一,其中if-else和switch-case最为常用,那很多同学也会有疑惑,这两种方式有什么区别,哪个效率更高一些呢。接下来我们就从字节码的角度,看看这两种方法的实现。 先来看看if-else。 public void foo(int i) { i...

2020-03-26 11:18:20 78 0

原创 Android:解读TextView的DynamicLayout

在《Android:TextView的Layout创建过程》中我们提到过,TextView中有三种Layout,我们已经讲了两种,今天我们就来说说第三种,动态布局DynamicLayout。我们平时使用的带链接的、ClickSpan等带样式的TextView,都会默认由这种布局进行处理。下面我们定...

2020-03-25 10:26:26 103 0

原创 Android:解读TextView的StaticLayout
原力计划

StaticLayout用于布局之后,不会再进行编辑的文本。 Android:TextView的Layout创建过程中提到过Layout创建的过程,所以这里直接从TextView的makeSingleLayout开始。 当判断不满足DynamicLayout和BoringLayout之后,就会...

2020-03-17 11:11:42 90 0

原创 Android:解读TextView的BoringLayout
原力计划

A BoringLayout is a very simple Layout implementation for text that fits on a single line and is all left-to-right characters. You will probably neve...

2020-03-12 16:48:45 134 0

原创 Android:TextView的Layout创建过程

TextView组件,使用频率非常高,虽然使用起来比较简单,但是它的实现其实是一个复杂的过程。它对文字的管理是通过Layout实现的。TextView内部会根据不同的设置,创建不同的Layout,总共有三种。 DynamicLayout:用在EditText或者TextView中设置的是Span...

2020-03-10 11:25:21 94 0

原创 Android:TextView的AutoSizeText实现过程
原力计划

在实际开发中,我们经常会遇到,TextView区域固定,但字数不确定,又希望把文字信息都展示出来,IOS中可以轻松实现,但在Android上好想并没有这种实现。 从8.0(API26)开始,TextView组件提供了autoSizeTextType、autoSizeMinTextSize、aut...

2020-03-06 12:32:07 1291 0

原创 Android:看看Google工程师的手误

我们启动Activity,都会用到Intent,Intent需要传入Context参数,通常我们在Activity中使用Intent时,都会传入Activity的实例作为Context。但由于考虑到内存泄漏的风险,大都提倡使用ApplicationContext,所以很多同学就把Activity类...

2020-03-04 15:49:58 131 0

原创 Serializable是怎么工作的(反序列化)

在《Serializable是怎么工作的(写入)》篇文章中,我们大致了解了Serializable的写入过程,我们用到的是ObjectOutputStream,那与之对应的就是反序列化,把存入文件的二进制数据,读出来,转换为对应的实例对象,这次就该用到ObjectInputStream了。使用代码...

2020-03-03 10:15:03 59 0

原创 Serializable是怎么工作的(写入)

Serializable是Java提供的数据序列号接口,只要你的Bean继承自Serializable接口,那么就可以被序列化保存到介质中或者进行数据的传输。 当我们查看Serializable的代码时,就会发现,里面什么都没有,那Java是如何处理继承了Serializable接口的数据呢? ...

2020-03-02 13:47:17 86 0

原创 String的比较,你都搞清楚了吗

String这个使用频率极高的数据类型,每个人都能说出很多关于它的使用情景。因为String相对于int等基本类型的内在差别,也常被面试官拿来拿捏面试者。不过确实,虽然我们每天声明无数次String对象,但是对于它的那些事,还是既熟悉又陌生,有点最熟悉的陌生人的感觉。所以今天汇总一下String的...

2020-02-28 12:42:14 124 0

原创 从源码看int和Integer的面试题

int是一种基本数据类型,Integer是一个对象,需要实例化才能使用。它对int进行了包装,在Integer内部有一个对应的数值int变量。 private final int value; int和Integer的对比,经常被拿来作为面试题,下面就多种情况,通过源码分析其结果。我们将比较...

2020-02-25 10:13:05 94 0

原创 Android:LinkMovementMethod、ScrollingMovementMethod

再上一篇文章《MovementMethod,BaseMovementMethod》中我们讲了Movement的基类,这里我们讲一下它的子类LinkMovementMethod和ScrollingMovementMethod,为什么把它俩放到一起呢?因为LinkMovementMethod继承自Sc...

2020-02-21 11:34:23 153 0

原创 Android:MovementMethod,BaseMovementMethod

我们在使用TextView,EditText等组件时,可以会有光标的显示,可以选择文本,拖动轨迹球,滚动,长按弹出菜单等操作,这些都是MovementMethod的作用。 MovementMethod是一个接口,提供了光标的位置、滚动以及文本的选择等操作。它会处理按键及Touch等操作。这个接口...

2020-02-11 14:57:32 157 0

原创 Andorid:版本不匹配导致的Installation failed due to invalid APK file

最近将Gradle升级,新建项目,并在模拟器中运行,没想到出现了无法安装的错误。 Installation failed due to invalid APK file 查看LogCat日志,有Couldn't load memtrack module的错误提示。 模拟题是 8.0...

2020-02-01 11:14:43 150 0

原创 Android:Parcelable序列化读写过程(Parcel)

Parcelable是为Android量身定制的序列化接口,底层是C的实现,通过内存来操作数据。Android中通过Binder机制传递Parcelable数据。 Parcelable是一个接口,需要序列化的对象必须实现这个接口。而具体负责数据组装的是Parcel类。接下来,我们就以Activi...

2020-01-14 10:31:04 135 0

原创 Java:源码分析—反射(Method、Field)

在上一篇文章Java:源码分析—反射(实例化对象:newInstance)中我们了解了反射进行对象实例化的过程,既然对象有了,我们就要使用它,对于一个对象,我们最常用的就是方法和属性里,所以这一篇我们就来看看反射中的Method和Field。 在Class.java文件的代码中,比较常用的关于方...

2020-01-09 09:54:17 95 0

原创 Java:源码分析—反射(实例化对象:newInstance)

今天我们来通过源代码,看看Java中反射是如何工作的。 反射,其实在我们日常的编程过程中可能用的并不多,但是第三方的库,这个技术确实应用非常广泛的,包括我们在开发Android应用时,有时为了操作一些不开放的系统属性时,也会用到反射。 这里我们将通过分析反射的运行,来看看Class这个类的功能...

2020-01-08 13:45:15 208 0

原创 “+”真的可以替代StringBuilder吗

最近在头条上看到一篇帖子,说Java8开始,字符串拼接时,“+”会被编译成StringBuilder,所以,字符串的连接操作不用再考虑效率问题了,事实真的是这样吗?要搞明白,还是要看看Java编译后的字节码。 先比较这样两段代码。最简单的字符串拼接,一个用“+”,一个用StringBuilder...

2020-01-03 08:31:05 93 0

原创 Android:Volley框架分析(十)—— Cache的运转步骤

在上一节,Cache的主要方法分析完后,我们就看看Volley是如何使用Cache的。 1、开启Cache选项 request.setShouldCache(true); 2、添加Request到队列,Volley先判断是否使用缓存,使用就添加到缓存队列,不使用就添加到工作队列(Reque...

2019-12-30 10:19:07 44 0

原创 Android:Volley框架分析(九)—— Cache

目前只要是涉及到网络的框架,基本都要考虑缓存问题,在符合要求的情况下,实现快速响应并且减少网络交互。Volley同样也有一套自己的缓存策略,这一节就来讲讲Volley的缓存实现。因涉及到HTTP的缓存知识,这里只做简单描述,不做重点解释。 Volley会把每个请求的信息,存储到本地文件中,文件名...

2019-12-30 10:07:22 36 0

原创 Android:Volley框架分析(八)—— ImageRequest

这节我们来看Request的另一个子类ImageReqeust,这个类是用来请求图像资源的。先看看使用方法。(图片实际尺寸1920*1080) 构造函数: public ImageRequest(String url, Listener<Bitmap> listener,...

2019-12-25 14:47:50 71 2

原创 Android:Volley框架分析(七)—— Request、StringRequest、JSONRequest

目录 Request StringRequest JsonRequest 终于讲到使用Volley过程中,我们直接面对最频繁的一个对象了,那就是Request(请求),你的任何一次请求接口,都要创建一个Request并添加到请求队列中,我们在前端通过Listener回调去接收返回结果。co...

2019-12-25 14:41:46 58 0

原创 Android:Volley框架分析(六)—— 重试机制(RetryPolicy)

当请求超时,Volley内部会启动重试机制,对超时接口进行多次请求,直到超过此数后,抛出错误信息。 先看看,重试请求是在哪里发出来的。回到BasicNetwork的performRequest方法,看代码后半部分的几个catch捕获,其中有几个地方会发出重试的动作。 catch (Socke...

2019-12-24 14:57:48 36 0

原创 Android:Volley框架分析(五)—— ByteArrayPool

上一节我们讲了请求发出去的整个过程,在BasicNetwork中,我们发现了一个属性。 private static int DEFAULT_POOL_SIZE; protected final ByteArrayPool mPool; DEFAULT_POOL_SIZE = 4096; ...

2019-12-23 13:56:41 63 0

原创 Android:Volley框架分析(四)—— BasicNetwork和HurlStack

在前面的文章中,我们提到过,在NetworkDispatcher中传入了BasicNetwork实例,BasicNetwork中又存在HurlStack对象,他们就是负责真正向网络发起请求的部分。 Android:Volley框架分析(三)—— Dispatcher中提到了下面的代码,由Ba...

2019-12-23 13:56:34 33 0

原创 Android:Volley框架分析(三)—— Dispatcher

在Android:Volley框架分析(二)——请求队列中我们讲到队列任务开始后,就会将工作交给Dispatcher,这一节我们来看看Dispatcher是如何工作的。 在Queue的start方法中,有两个Dispatcher。一个缓存分发(这里先不做介绍),一个工作队列分发NetworkDi...

2019-12-19 16:20:44 40 0

原创 Android:Volley框架分析(二)——请求队列

在Android:Volley框架分析(一)——请求准备并发出的操作步骤中,我们了解了一个请求发出去的步骤,这一节我们就来看看请求队列的事。 requestQueue.add(request); 通过上面的代码,一个请求就被加入到Volley的请求队列,请求将被逐个执行。 先来看看请求队列...

2019-12-19 16:20:38 56 0

原创 Android:Volley框架分析(一)——请求准备及发出的操作步骤

Volley是一个较早出现的网络请求框架,虽然现在已经不在得到官方的维护,但其中的思想还是值得探究一下,直接入题,看看Volley的使用步骤。 记得加上网络权限。 <uses-permission android:name="android.permission.INTERN...

2019-12-19 16:20:23 43 0

原创 微信公众号开发(十)——扫描带参数二维码事件

我们通过微信扫码二维码已经是十分频繁的操作了,为了满足用户渠道推广分析和用户帐号绑定等场景的需要,微信公众平台提供了创建带参数二维码的接口,通过产生的ticket,去获取二维码图片。当用户扫描这个二维码时,公众平台就会向你设置的接口推送扫描消息。 二维码分为临时二维码和永久二维码,介绍可以参考官...

2019-12-17 16:32:29 119 0

原创 微信公众号开发(九)——用户消息接收

目录 文本消息 图像消息 语音消息 视频及小视频消息 接收到的数据信息如下,小视频唯一区别就是MsgType=shortvideo 地理位置 当任何一个微信用户,打开你的公众号,通过键盘输入文字、选择图片等信息发送时,你设置的接口,就会收到对方的信息。这个信息结构大致和被动回复(...

2019-12-12 11:16:14 54 0

原创 微信公众号开发(八)——关注与取消关注

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> &...

2019-12-12 10:27:31 36 0

原创 微信公众号开发(六)——点击菜单回复音乐

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> &...

2019-12-11 15:11:35 74 0

原创 微信公众号开发(七)——点击菜单回复图文消息

<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> &...

2019-12-11 15:10:13 303 1

原创 微信公众号开发(五)——点击菜单回复视频

回复数据格式如下: <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUser...

2019-12-11 15:09:50 92 0

原创 微信公众号开发(四)——点击菜单回复图片和语音

先讲回复图片,语音类似。 这个发送图片,并不是点击输入框右侧的“➕”,去选择本地照片,而是要把图片上传的公众号的服务器。 按照开发文档https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user...

2019-12-11 15:09:40 370 0

原创 微信公众号开发(三)——点击菜单回复文本

在测试账号申请时,我们还记得填写过一个URL进行Token验证,那么你和公众号的交互,也将通过此即可进行。这篇文章将讲解如何点击底部菜单,返回文字信息。 官方文档https://developers.weixin.qq.com/doc/offiaccount/Message_Management...

2019-12-11 15:09:30 601 0

原创 微信公众号开发(二)——创建菜单

官方文档https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html 公众号的菜单,是通过微信提供的记录,以POST方式,将JSON串通过BODY提交给服务器处理的,...

2019-12-11 15:09:17 127 0

原创 微信公众号开发(一)——测试账号申请

从这篇文章开始,将陆续介绍微信公众号的开发过程,使用测试账号,代码不进行封装,便于大家浏览理解。 在没有正式账号的时候,为了方便开发人员开发调试,微信提供了测试账号,供开发人员在开发阶段使用。 如图申请了正是账号,这些操作是可以在微信公众号平台进行操作的。 打开申请地址http://mp...

2019-12-11 15:09:05 115 0

原创 vue修改proxyTable解决跨域请求,报404的解决

环境:vue前端和后端接口部署在同一台机器。 vue服务部署在http://localhost:8081,后台服务部署在http://localhost:8080,可以看到端口是不一样的,在vue通过以下方式请求: export default { name:'Condit...

2019-10-25 11:16:53 1468 0

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