自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

转载 看完让你彻底理解 WebSocket 原理

1、前言最近有同学问我有没有做过在线咨询功能。同时,公司也刚好让我接手一个 IM 项目。所以今天抽时间记录一下最近学习的内容。2、WebSocket 与 HTTPWebSocket 协议在2008年诞生,2011年成为国际标准。现在所有浏览器都已经支持了。WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。HTTP 有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个 HTTP 请求合并为一个,但是 Web

2021-06-23 17:09:16 353

转载 synchronized同步机制——如果你愿意一层一层剥开我的心

前言 synchronized,是解决并发情况下数据同步访问问题的一把利刃。那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟。 Synchronized的使用场景 synchronized关键字可以作用于方法或者代码块,最主要有以下几种使用方式,如图: 接下来,我们先剥开synchronized的第一层,反编译其作用的代码块以及方法。 synch...

2021-03-24 14:09:26 155

原创 一步步打造网络请求框架——功能扩展(三)

上一篇文章重点介绍了如何优化现有的网络框架,本篇文章重点分析,在此基础上一步步打造网络请求框架——细节优化(二),如何进行功能上的扩展,让框架的适应性更强。上一篇文章末尾提到,网络请求取消的功能还没有,那么,今天就把这个功能分析一下并且做出来,再看看还有没有别的方面的扩展。关于网络请求取消,大多数情况下是我们的Acticity关闭了以后,而后台网络请求还在执行,此时最好将当前的网络请求取消(因为页面已经关闭,请求实际上没有意义了),那具体操作就是在onDestory()中操作当前线程池正在处理的任务

2021-02-24 17:38:32 132

原创 一步步打造网络请求框架——细节优化(二)

接着上一篇文章:一步步打造网络请求框架——初步成型(一)继续,网络框架是搭建好了,测试后也可以使用,但是能不能再优化一些呢?高质量的代码从来都不是一蹴而就,而是经过不断地重构锤炼而成,重新再Review几遍代码,发现值得优化的地方还不少,下面就开始进行具体的细节优化。...

2021-02-20 17:34:17 311 2

原创 一步步打造网络请求框架——初步成型(一)

每个公司的项目都有各自具体的业务,市面上大多数第三方网络请求框架都不能完全满足公司业务的具体需求,所以自己动手一步步写一个网络加载框架。说到网络请求,无非是把子线程中请求到的数据解析出来,并发送回主线程去,期间Activity中处理的逻辑越少越好,美其名曰:一行代码完成,其实也就是如下图所示的类图:根据上方的逻辑图,先把每个分支都写好,这里需要导入两个jar包<uses-permission android:name="android.permission.INTERNET" /&gt

2021-02-07 17:54:28 408 1

原创 HashMap和SparseArray性能对比

当我们声明并实例化一个HashMap的时候,会出现如下提示:系统建议我们用SparseArray来代替HashMap,都说SparseArray性能优于HashMap,那我们就来做个示例,用直观的数据来对比一下二者的性能。public class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName();

2020-10-16 16:02:02 610

原创 从源码的角度理解并实现Fragment的懒加载

网上有很多Fragment懒加载的案例,面试当中也会经常问到这个问题,大多数回答都是在setUserVisibleHint()方法中做文章,why?如果从Fragment1快速滑动到Fragment2上,此时Fragment1的数据还需要加载吗?如果不需要,如何停止加载?setUserVisibleHint()和Fragment其它回调方法有什么联系?本文通过这几个问题,一步一步来实现Fragment的懒加载。 一般都会用ViewPager+Fragment实现底部或者顶部页签页面,此时如...

2020-10-14 17:23:21 254

原创 Android ListView局部刷新数据

对于ListView、Gridview刷新列表我们并不陌生,只需要在数据源改变之后,调用BaseAdapter的notifyDataSetChanged方法,就可以刷新列表了。但是,如果我们只改变了某一行item的数据,只需要刷新单条item,也去调用notifyDataSetChanged方法,就显得没必要了,因为我们并不需要去刷新其它的item。在这里,我们需要一种方法,只刷新单条数据,而不是刷

2016-11-07 11:29:15 3054

原创 Android 从源码的角度分析——为什么要用newInstance来实例化Fragment

最近在看Google技术文档的时候发现了一种新的方式来实例化Fragment,就是采用静态工厂的方式创建Fragment。我们在使用Android studio创建一个类的时候,选择New ->Fragment->Fragment(Blank)可以很直观的看到这种方式的写法:public class BlankFragment extends Fragment { private stati

2016-11-03 17:03:04 5464 3

原创 Android子线程真的不能更新UI吗?让我们从源码的角度一探究竟

关于主线程更新UI这已经是个老生常谈的话题,几乎所有人都知道Android要在主线程更新UI。Android官方文档这样描述:Android UI操作并不是线程安全的,并且这些操作必须在UI线程执行。 那么,子线程到底能否更新UI,如果不能更新UI,又是为什么?先来看一个简单的例子:<RelativeLayout xmlns:android="http://schemas.android.

2016-11-02 11:36:06 700 2

原创 Android沉浸式模式,体验真正的沉浸式

提起沉浸式,很多人会说沉浸式状态栏,至于这个名称怎么来的,不得而知。然而Android官方文档中并没有给出沉浸式状态栏的名称,只有沉浸式模式这么一说,下面这段话出自Android官方文档,也很好的解释了沉浸式模式到底是什么。 其实,Android沉浸式模式的本质就是全屏化,将背景与状态栏融为一体,让用户可以通过手势滑动的操作隐藏或显示状态栏和导航栏。目前好多大型游戏,都实现了这种模式,比如龙珠激斗

2016-08-25 17:46:11 1283 2

空空如也

空空如也

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

TA关注的人

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