自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

椎锋陷陈

我必须强大,能保护我爱的人

  • 博客(25)
  • 资源 (16)
  • 收藏
  • 关注

原创 【动画图解】这个值取对了,ViewPager2才能纵享丝滑

今天我们主要介绍是ViewPager2的「离屏加载机制」,你可能是第一次听说这个术语,但在实际开发中,你肯定使用过它,因为它对应的配置入口,就是ViewPager2的OffscreenPageLimit属性。

2023-02-15 18:56:58 1698

原创 掌握这17张图,没人比你更懂RecyclerView的预加载

回顾上一篇文章,我们为了减少描述问题的维度,于演示之前附加了许多限制条件,比如禁用了RecyclerView的预拉取机制。实际上,预拉取(prefetch)机制作为RecyclerView的重要特性之一,常常与缓存复用机制一起配合使用、共同协作,极大地提升了RecyclerView整体滑动的流畅度。并且,这种特性在ViewPager2中同样得以保留,对ViewPager2滑动效果的呈现也起着关键性的作用。因此,我们ViewPager2系列的第二篇,就是要来着重介绍RecyclerView的预拉取机制。在计算

2022-12-28 07:58:07 732 1

原创 这10张图拿去,别再说学不会RecyclerView的缓存复用机制了!

作为ViewPager2系列的第一篇,本篇的主要目的是快速普及必要的前置知识,而内容的核心,正是RecyclerView的缓存复用机制。

2022-12-06 08:15:00 427

原创 网络热传App鉴定 |「得物」疑私删用户视频?从技术角度还原事件始末

一场由「Android系统的历史遗留问题」,「得物App对于适配工作的不作为」以及「系统拦截App删除操作的判定规则」三者共同作用下所引发的「乌龙事件」

2022-11-18 01:17:29 915

原创 用影片《记忆碎片》解释Java注解的工作原理

小小的一个注解,是怎么帮我们完成某件特定的工作的呢?

2022-10-17 07:45:00 704

原创 【图像格式篇】可以从网络加载点9图的吗?

可拉伸区域由左侧及顶部一条或多条黑线来定义,左侧的黑色边框定义了纵向拉伸的区域,顶部的黑色边框定义了横向拉伸的区域,拉伸的效果是通过复制区域内图片的像素来实现的。可以看到,由于可拉伸区域选择的都是比较平整的区域,而没有覆盖到四周的圆角,因此图片无论怎么纵向或横向拉伸,四周的圆角都不会因此而变形失真。可绘制区域由右侧及底部的各一条黑线来定义,称为内边距线。如果没有添加内边距线,视图内容将默认填满整个视图区域。

2022-09-26 07:18:14 823

原创 Glide库里,藏了一套你心心念念的GIF压缩工具集

移动端的图片压缩是一个老生常谈的话题,也曾涌现过不少诸如Luban之类的优秀的图片压缩工具库,但在GIF图像领域的压缩方案却几乎处于一片空白。许多开发者不知道的是,实际上,已经有一套现成的GIF图像压缩工具集,就内置在你集成的Glide图片加载框架之中。大家好,我是潜伏于各大群中收集GIF表情包的椎锋陷陈,今天我们要分享的是移动端的GIF图像压缩方案。我们会从GIF图像的基础知识出发,介绍几种常见的GIF图像压缩策略,然后利用Glide框架内部自带的压缩工具集来实现。过程中如有不合理的地方,

2022-09-19 07:31:59 587

原创 从《羊了个羊》看随机数的生成原理

最后,祝你是那0.1%的幸运儿,游戏如是,生活也如是。

2022-09-18 18:09:11 1396

原创 “雪糕刺客”你听说过,Bitmap这个“内存刺客”你也要小心(上)~

雪糕刺客是最近被网友们玩坏了的梗,指的是那些以平平无奇的外表混迹于众多平价雪糕之中的贵价雪糕。由于没有明确标明价格,通常要等到结账的时候才会发现,犹如一个潜藏于普通人群中的刺客般,伺机对那些大意的顾客们的钱包刺上一剑,因此得名。而在Android中,也有这么一个内存刺客,其作为我们日常开发中经常接触的对象之一,却常常因为使用方式的不当,时不时地就会给我们有限的内存来上一个背刺,甚至毫不留情地就给我们抛出一个OOM,它,就是Bitmap。为了讲好Bitmap这个话题,本系列文章将分为上下两篇,上篇;色深。..

2022-07-30 20:36:54 196

原创 Android 12 保姆级适配指南

Android 12的适配工作不得不提上日程了。

2022-05-04 16:07:12 2676 2

原创 IM篇 I (╯‵□′)╯︵┻━┻ 极光?个推?腾讯云?第三方推送平台该怎么选?

推送的意义「推送机制」为我们提供了一条可以「直接触达用户」的路径,使移动设备终端的「全时信息传播」成为可能,是C端运营人员提高用户活跃度、提高应用留存率的常规途径之一,以助于其「更高效地完成运营目标」。推送的技术实现难点自建推送通道主流的推送方案实现,是由客户端和服务端建立一条TCP长连接通道,并由客户端定期向服务端发送心跳包,以保持长连接可用。服务端有消息要推送时,即可通过这个长连接通道直接下发到客户端。然而,要实现这样一套自建推送通道,却没有以上所描述的那样简单。且不说服务端需要应对海量长连

2021-11-11 09:08:39 1507 1

原创 IM I 每日一技巧 I 增量更新

启动阶段的数据同步但凡是社交类或带有一点社交属性的App,其不可避免的一项常规工作就是「好友数据的维护」,常见的好友数据包括但不限于:好友资料更新新增好友申请好友关系变更(密友/拉黑/删除等)…当发生诸如此类的好友数据变动时,通常要求能将变动及时同步到用户端。否则一旦同一好友链上的多个用户的信息不一致,就有可能出现很多莫名其妙的现象。用户在线时,可以考虑直接通过长连接通道下发「控制消息」(如好友资料更新通知、好友关系变动通知等),主动通知客户端进行相应的数据更新操作。这种做法可以进行较细粒

2021-11-04 19:24:12 408

原创 IMI每日一概念IACK机制

介绍ACK(Acknowledgement)机制,即确认机制。在即时通讯开发领域,ACK机制是为了应对复杂多变的网络环境,确保消息的可靠投递而设计的。这套机制的核心,是接收方在成功收到消息并正确处理后,需要回复给发送方一个确认应答数据包(ACK应答包),用来表示消息已确认接收无误。失败重试发送方通常需要在本地维护一个等待ACK的队列,如果在一定时间内未收到指定消息对应的ACK应答包,则会尝试重新发送当前的消息。一般会设置一个重试次数的上限,达到此上限之后就不再发送,转而在客户端显示发送失败的提醒。

2021-10-31 22:20:34 1683

原创 AndroidI每日小技巧I如何更好地维护代码混淆规则文件(Proguard)?

要启用代码混淆,在build.gradle文件中的最简配置可能是这样的: buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }其中,「proguardFiles」属性用于配置「混淆规则文件.

2021-10-30 11:31:33 310

原创 手把手教你搭建应用的网络诊断模块(1)——Ping与TraceRoute

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!前言一个App功能的整体表现,往往与用户当前的网络状况密不可分。通过为App引入一个轻量级的网络诊断模块,收集那些能够衡量当前网络状况的重要信息,然后在征得用户同意的情况下,将信息上报到服务端进行分析,可以有针对性地对网络链路中的薄弱环节进行优化。众所周知,Android系统基于Linux内核的,Linux本身就提供了许多可用于检测网络状况的工具,熟练地运用这些工具,可以很轻松地达到我们网络诊断的目的。今天要分享的就是其中的两

2021-08-08 14:25:03 1387

原创 这里有一份《客户端日志打印规范》呈现给您!

前言「日志」对于客户端开发人员来讲,可以算是既熟悉又陌生了,它和代码注释、编程风格一样,本身不会为功能带来任何增益,也通常不会与你的KPI挂钩。但当有线上问题产生而你无从排查的时候,多少曾经感叹过“我当时要是在这里打印一条日志就好了”,由此可见打印日志的重要性。但由于长期缺少一个合理的日志规范,导致滥用、乱用日志打印的现象层出不穷。为了解决这个痛点,今天,我们将以「为什么要打印日志」、「应该怎样打印日志?」以及「什么时候该打日志」三个方面为切入点,来拟定一份适合客户端开发中使用的《日志打印规范》。WH

2021-07-25 16:51:49 643

原创 Android即时通讯系列文章番外篇(1)使用Netty框架快速搭设WebSocket服务器

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!前言随着本系列所讨论技术点的逐步深入,仅靠之前提到的官方测试服务器已经不能满足我们演示的需要了,于是我们有必要尝试在本地搭建自己的WebSocket服务器,今天这篇文章就是介绍这方面的内容。由于不属于原先的写作计划之内,同时也为了保持系列文章的连贯性,因此特意将本篇文章命名为「番外篇」。Netty简单介绍还记得前面的文章「Android即时通讯系列文章(2)网络通信协议选型:应以什么样的标准去选择适合你应用的网络通信协议

2021-07-06 12:56:30 769

原创 如何判断Android应用运行在鸿蒙系统上

前言不久前,HarmonyOS 2.0的正式发布,在华为用户及科技产品爱好者之间掀起了不小的波澜。其中,讨论关于HarmonyOS是如何兼容Android应用的话题最为频繁,从而引发了多方阵营关于「HarmonyOS究竟是否是套壳Android」的激烈争论。与此同时,部分嗅到风向的开发者,已经在部署如何收集应用在HarmonyOS上的兼容情况了。这不,笔者所在的公司就安排我去进行相关的技术调研。其中,最重要的一点就是判断当前应用是否搭载在了HarmonyOS上,从而统计升级HarmonyOS的用户数量,

2021-06-24 20:11:15 1918 1

原创 Android即时通讯系列文章(4)MapStruct:分层式架构下不同数据模型之间相互转换的利器

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!文章开篇,让我们先来解答一下上篇文章中留下的疑问,即:为什么要设计多个Entity?以「分离关注点」为原则的分层式架构,是我们在进行应用架构设计时经常采用的方案,例如为人熟知的MVC/MVP/MVVM等架构设计模式下,划分出的表示层、业务逻辑层、数据访问层、持久层等。为了保持应用架构分层之后的独立性,通常需要在各个层次之间定义不同的数据模型,于是不可避免地要面临数据模型之间的相互转换问题。常见的不同层次的数据模型包括:VO

2021-06-20 17:46:03 527 4

原创 Android即时通讯系列文章(3)数据传输格式选型:资源受限的移动设备上数据传输的困境

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!前言跟PC时代的传统互联网相比,移动互联网得益于移动设备的便携性,仅短短数年便快速地渗透到了人们生活、工作的各个方面。虽然通信技术和硬件设备在不断地更新升级换代,但就目前而言,电量、流量等对于移动设备来讲仍属于稀缺资源。参与过Android系统版本升级适配工作的开发人员,也许可以很明显地感受到,近年来Android系统每一个更新的版本都是往更省电、更省流量、更省内存的方向靠拢的,比如:Android 6.0 引入了 低电耗

2021-06-20 17:45:04 298

原创 Android即时通讯系列文章(2)网络通信协议选型:应以什么样的标准去选择适合你应用的网络通信协议?

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!前言在前一篇文章《多进程:为什么要把消息服务拆分到一个独立的进程?》中我们出于保证连接的稳定性的目的,将应用拆分成了「主进程」和「通讯进程」,并为二者定义了相互通信的接口。即便如此,我们也只是实现了客户端一侧的进程间通信,而要实现与完整聊天系统中另一端的角色——服务端的通信,则需依靠「网络通信协议」来协助完成,在此我们选用的是WebSocket协议。什么是WebSocket?WebSocket一词,从词面上可以拆解为 Web

2021-06-20 17:43:55 686

原创 Android即时通讯系列文章(1)多进程:为什么要把消息服务拆分到一个独立的进程?

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!这是即时通讯系列文章的第一篇,正式开始对IM开发技术的讲解之前,我们先来谈谈客户端在完整聊天系统中所扮演的角色,为此,我们必须先明确客户端的职责。现今主流的IM应用几乎都是采用服务器中转的方式来进行消息传输的,为的是更好地支持离线、群组等业务。在这种模式下,所有客户端都需连接到服务端,服务端将不同客户端发给自己的消息根据消息里携带的用户标识进行转发或广播。因此,作为消息收发的终端设备,客户端的重要职责之一就是保持与服务端的连接

2021-06-20 17:42:21 371

原创 Android即时通讯系列文章(0)起源:对接触工作以来所涉及过的即时通讯技术的全面复盘

「椎锋陷陈」微信技术号现已开通,为了获得第一手的技术文章推送,欢迎搜索关注!为什么想要写这个系列的文章?2018年年末,由于所在公司的战略方向转向东南亚一隅,意欲打造一款面向东南亚市场的即时通讯应用,并且高层在综合考量之后决定采用自研技术,于是机缘巧合之下我被安排到IM项目组,从而再次接触到了即时通讯技术。为什么说是再次呢?因为我之前参与开发的两个商业项目同样运用到了即时通讯技术,一个是用到 XMPP+Openfire+Smack,另外一个是用到MQTT,只是当时由于工作经验的关系都只停留在环境的搭建

2021-06-20 17:33:36 126

原创 Android使用XMPP协议、Openfire服务器和Smack类库实现即时通信

效果   介绍XMPP(Extensible Messaging and Presence Protocal,可扩展通讯和表示协议)是一种基于XML的网络即时通信协议,它继承了在XML环境中灵活的发展性,因此,基于XMPP的应用具有超强的可扩展性。XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上,借助于XML易于解析和阅读的特性,使

2015-11-24 21:13:59 1984 1

原创 Android使用SpannableString实现文本框里插入表情

效果         介绍       SpannableString,相较于普通String带有丰富的格式设置,可使文本的可读性更强。两者都用于存储字符串,而SpannableString的特殊之处就在于有一个setSpan()函数,因而能给存储的文本添加各种样式,诸如文本颜色样式((ForgroundColorSpan),文本背景颜色样式((BackgroundColorS

2015-09-25 21:47:42 2764 1

Android使用ViewPager实现图片轮播(高度自适应,左右循环,自动轮播)

详情请移步:http://blog.csdn.net/alfred_c/article/details/50563886

2016-01-22

Android高效压缩图片不失真的方法总结

详情请移步:http://blog.csdn.net/alfred_c/article/details/50542741

2016-01-19

Android使用Volley解析网易云音乐Api

详情请移步:http://blog.csdn.net/alfred_c/article/details/50471171

2016-01-06

Gson-2.3.1类库

Gson是用来在Java对象和JSON数据之间进行映射的Java类库,可以将一个JSON字符串转成一个Java对象,或者反过来。

2016-01-06

Volley网络通信类库

Volley是针对Android平台的网络通信类库,能使网络通信更容易、更快速、更健壮,适用于数据量不大、但通信频繁的网络操作。

2016-01-06

Android构建一个通用的WebView(二):自定义的错误页面、缓存数据,离线浏览

详情请移步:http://blog.csdn.net/alfred_c/article/details/50395111

2015-12-24

Android构建一个通用的WebView

详情请移步:http://blog.csdn.net/alfred_c/article/details/50151157

2015-12-02

Android使用XMPP协议、OpenFire服务器和Smack类库实现即时通信

详情请移步:http://blog.csdn.net/alfred_c/article/details/50017607

2015-11-24

XMPP客户端Java类库:Smack

Smack是一个开源的、易于使用的XMPP客户端Java类库,提供了一套可扩展的API。

2015-11-24

Android使用兰贝壳儿实现多渠道打包

详情请移步:http://blog.csdn.net/alfred_c/article/details/49765639

2015-11-10

兰贝壳儿Eclipse插件

一个Eclipse插件,为Android开发提供了多渠道打包功能和一些工具类。

2015-11-10

Android分享到微信好友,朋友圈

详情请移步:http://blog.csdn.net/alfred_c/article/details/49722833

2015-11-09

Android分享到微信好友、朋友圈

详情请移步:http://write.blog.csdn.net/postedit/49722833

2015-11-09

Android使用SpannableString实现文本框里插入表情

详情请移步:http://blog.csdn.net/fengkuanghun/article/details/7904284

2015-09-25

Android使用Fragment实现标签页

详情请移步:http://blog.csdn.net/alfred_c/article/details/48632441

2015-09-22

Android用ViewPager实现引导页(带小点提示)

详情请移步:http://blog.csdn.net/alfred_c/article/details/48445255

2015-09-14

空空如也

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

TA关注的人

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