Android
Lerendan
这个作者很懒,什么都没留下…
展开
-
Android RecyclerView 重难点解析
一、基本使用RecyclerView 的适配器通常的写法如下:public class TestAdapter extends RecyclerView.Adapter<TestAdapter.Holder> { private List<UserEntity> mList; public TestAdapter(List<UserEn...原创 2020-04-07 16:46:06 · 1111 阅读 · 0 评论 -
Android ListView 重难点解析
一、基本使用public class FruitAdapter extends ArrayAdapter<Fruit> { private int resourceId; public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects) { ...原创 2020-04-07 12:02:20 · 308 阅读 · 0 评论 -
Android 断点续传解析
一、原理断点续传,顾名思义就是下载文件时不必每次都重新开始,可以从之前已经下载好的地方接着下载,这样既可以省流量还能省时间。那么怎么样才能做到呢?这就要靠 RandomAccessFile 这个类了,来看看 RandomAccessFile 这个类的定义:public class RandomAccessFile implements DataInput, DataOutput, Clo...原创 2020-02-10 21:26:55 · 428 阅读 · 0 评论 -
Android Bitmap 的高效加载解析
一、Bitmap 占用的内存在 Android 手机运行时 Bitmap 占用的内存计算:Bitmap 内存占用 ≈ 像素数据总大小 = 图片宽 × 图片高× ( 设备dpi / 资源目录dpi ) ^ 2 × 单个像素的字节大小其中单个像素的字节大小由 Bitmap 的一个可配置的参数 Config 来决定。Bitmap 中存在一个枚举类 Config,定义了 Android 中...原创 2020-02-10 20:17:54 · 430 阅读 · 0 评论 -
Android LruCache 缓存机制解析
一、前言关于 Android 的三级缓存,其中主要的就是内存缓存和硬盘缓存。这两种缓存机制的实现都应用到了 LruCache 算法。一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。...原创 2020-02-10 15:17:06 · 166 阅读 · 0 评论 -
类加载机制(二)Android 中的 ClassLoader
类加载器(一)Java中的ClassLoader前言在上一篇文章我们学习了Java的ClassLoader,很多同学会把Java和Android的ClassLoader搞混,甚至会认为Android中的ClassLoader和Java中的ClassLoader是一样的,这显然是不对的。这一篇文章我们就来学习Android中的ClassLoader,来看看它和Java中的ClassLoade...原创 2018-08-12 18:37:05 · 370 阅读 · 0 评论 -
类加载机制(一)Java 中的 ClassLoader
目录一、前言二、ClassLoader的类型2.1、Bootstrap ClassLoader2.2、Extensions ClassLoader2.3、App ClassLoader2.4、Custom ClassLoader三、ClassLoader的继承关系四、双亲委托模式4.1、双亲委托模式的特点4.2、双亲委托模式的好处...原创 2018-08-12 17:57:28 · 919 阅读 · 0 评论 -
Android MVVM 架构详解
一、前言MVP 中我们说过随着业务逻辑的增加,UI 的改变多的情况下,会有非常多的跟 UI 相关的 case,这样就会造成 View 的接口会很庞大。而 MVVM 就解决了这个问题,通过双向绑定的机制实现数据和 UI 内容,只要想改其中一方,另一方都能够及时更新的一种设计理念,这样就省去了在 View 层中写很多 case 的情况,只需要改变数据就行。二、MVVM详解2.1、MV...原创 2019-11-08 15:15:13 · 1430 阅读 · 0 评论 -
Android MVP 架构详解
一、前言MVP 跟 MVC 很相像,上一篇文章开头列出了很多种 MVC 的设计图,所以根据 MVC 的发展来看,我们把 MVP 当成 MVC 来看也不为过,因为 MVP 也是三层,唯一的差别是 Model 和 View 之间不进行通讯,都是通过 Presenter 完成。二、MVP 详解在介绍 MVC 的时候提到了算是致命缺点吧:在 Android 中由于 activity(go...原创 2019-11-08 15:14:22 · 198 阅读 · 0 评论 -
Android MVC 架构详解
一、前言由于 MVP、MVVM 的兴起,MVC 在 android 中的应用变得越来越少了,但 MVC 是基础,理解好 MVC 才能更好的理解MVP,MVVM。因为后两种都是基于 MVC 发展而来的。二、MVC 详解我们从网上搜索 MVC 相关资料时,如果你多看几篇文章的话可能会发现,好像他们介绍的设计图都不太一样,这里罗列了大部分的设计图:到底上面列出的设计图哪个才是对的。其...原创 2019-10-25 10:09:05 · 2196 阅读 · 0 评论 -
Android Webview H5 加载速度优化方案
一、背景由于H5具备 开发周期短、灵活性好 的特点,所以现在 App大多嵌入了 Webview 组件进行 Hybrid 开发,但 APP Webview 存在令人烦恼的性能问题,特别突出的是:加载速度慢 & 消耗流量。1.1、渲染速度慢前端 H5 页面渲染的速度取决于两个方面:Js 解析效率、手机硬件设备的性能。Js 解析效率:Js 本身的解析过程复杂、解析速度不快 ...原创 2019-09-30 17:36:18 · 13179 阅读 · 1 评论 -
Android Glide 源码解析
待完成原创 2019-08-15 15:17:01 · 121 阅读 · 0 评论 -
Android RxJava2 背压详解
一、前言对于异步订阅关系,存在被观察者发送事件速度 与观察者接收事件速度 不匹配的情况,被观察者 发送事件速度太快,而观察者 来不及接收所有事件,从而导致观察者无法及时响应 / 处理所有发送过来事件的问题,最终导致缓存区溢出、事件丢失 & OOM,这个时候就需要使用到背压了。二、详解2.1、定义背压是一种控制事件流速的策略,它的作用是在异步订阅关系中,控制事件发送和...原创 2019-07-31 11:21:22 · 1041 阅读 · 0 评论 -
Android RxJava2 源码解析
一、前言关于 RxJava 的使用推荐大家看这篇文章RxJava2 只看这一篇文章就够了。二、订阅首先我们先分析一个最简单的示例,代码如下: Observable.create(new ObservableOnSubscribe<String>() { @Override public void ...原创 2019-07-16 18:55:20 · 296 阅读 · 0 评论 -
Android targetSdkVersion 升级至 26 指南
一、前言如下图,应用市场纷纷要求 targetSdkVersion 大于 26,于是乎将公司项目升级一波并测试上线,记录一下升级过程中觉得重要的点。二、升级2.1 动态权限如果你的应用之前的targetSdkVersion < 23,那么升级targetSdkVersion到26+首先要做的就是适配运行时权限。Android 6.0引入了运行时权限机制,这已经过去2...原创 2019-07-14 11:37:48 · 1719 阅读 · 0 评论 -
Android 中 Activity 的 onCreate 方法里面子线程为何能设置UI界面
如果之前你没有尝试过 onCreate 方法里面用子线程的 run 方法去设置 UI (比如对 Textview 进行 setText 操作),相信你看到这个标题,也会感到困惑和好奇吧。废话不多说,先来个 Demo 。protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta...原创 2018-07-19 15:21:02 · 1469 阅读 · 0 评论 -
Android 序列化之 Serializable 和 Parcelable
简介序列化是指把 Java 对象转换为字节序列并存储到一个存储媒介的过程。反之,把字节序列恢复为 Java 对象的过程则称之为反序列化。作用永久性保存对象,保存对象的字节序列到本地文件中; 通过序列化对象在网络中传递对象; 通过序列化在进程间传递对象。使用1.Serializable只需要实现 Serializable 接口,并提供一个序列化版本id (serialVer...原创 2018-07-27 11:45:14 · 201 阅读 · 0 评论 -
Android IPC 之 AIDL 使用与解析
一、前言在上篇博客中,我们详细的介绍了 Binder 的概念以及工作原理,本篇将介绍 Android IPC中最常用的一种方式 - AIDL,通过 AIDL 也可以帮助我们更好的理解 Binder。关于AIDL,我之前翻看过很多博客,里面先是写一大堆的概念然后堆代码。然而,按照作者的方式,写出来的代码根本运行不成功或者达不到同样的效果,这样就会浪费了读者的时间。因此我决定这篇博客换种方式,...原创 2019-01-04 22:12:25 · 385 阅读 · 0 评论 -
Android Binder 原理解析
目录一. 前言二. Binder 概述三. Linux 下传统的进程间通信原理3.1 基本概念介绍3.2 Linux 下的传统 IPC 通信原理四. Binder 跨进程通信原理4.1 动态内核可加载模块 && 内存映射4.2 Binder IPC 实现原理五. Binder 通信模型5.1 Client / Server / Service...原创 2019-01-01 22:27:59 · 2760 阅读 · 0 评论 -
暴力突破 Android 消息机制(一)Handler 解析
一、前言Android 应用开发中离不开 Handler 来处理一些逻辑任务,比如发送延迟消息处理业务等,而 Handler 实际上最终是将 Message 交给 MessageQueue,我们常用的图片加载缓存库等内部也是通过 Handler 最终由后台加载线程切换到主线程(UI线程)来更新页面的。MessageQueue 是 Android 消息机制的核心,熟悉 MessageQueu...原创 2019-02-02 18:19:44 · 370 阅读 · 0 评论 -
Android Activity 重难点解析
目录一、前言二、生命周期2.1 正常情况下生命周期分析2.2 异常情况下生命周期分析三、启动模式3.1 Activity 的 LaunchMode3.2 Activity 的 Flags四、IntentFilter4.1action的匹配规则4.2category的匹配规则4.3 data的匹配规则五、setResult() 调用时机一...原创 2019-02-19 17:15:26 · 370 阅读 · 0 评论 -
Android Service 重难点解析
目录一、前言二、Service 的用法三、前台服务四、IntentService4.1 IntentService 使用4.2 IntentService 源码解析4.3 IntentService 实践五、远程 Service一、前言Service 是Android 系统四大组件之一。Android 支持 Service 服务的原因主要目的有两...原创 2019-02-23 16:57:20 · 445 阅读 · 0 评论 -
Android 知识体系学习目录
随着工作时间的增长,越发觉得自己的知识不够系统和全面,因此为了方便读者阅读以及从点到面来逐步建立并完善自己的知识体系,总结写过的文章和一些想要写的文章目录如下:本目录下的内容是个人学习 Android 高级知识的路线,并加入了一些基础准备知识。基础准备1、JavaJava 基础 - String、StringBuilder、StringBufferJava 基础 - 关于 equa...原创 2018-05-03 17:23:36 · 1602 阅读 · 1 评论 -
Android AsyncTask 重难点解析
一、前言在android开发中相信大家或多或少都有使用过AsyncTask来执行异步任务然后更新Ui,在AsyncTask刚出来的时候一度受到了大家的追捧,因为可以告别使用Thread+Handler的线程模式。但是在不同SDK版本上AsyncTask有着比较大的差异,今天我们就来分析一下AsyncTask的源码以及各版本之间的差异,让你彻底理解AsyncTask。二、AsyncTa...原创 2019-03-01 15:22:56 · 857 阅读 · 0 评论 -
Android RemoteViews 解析
一、前言RemoteViews 顾名思义就是远程 View,它表示的是一个 View 结构,它可以在其他进程中显示,为了能跨进程更新它的界面,RemoteViews 提供了一组基础的操作来实现这个效果。RemoteViews 在 Android 中的使用场景有两种:通知栏和桌面小部件。二、RemoteViews 的使用2.1 通知栏使用系统默认的样式弹出一个通知的方式,代码...原创 2019-03-12 17:21:42 · 3306 阅读 · 0 评论 -
Android Window 和 WindowManager 解析
一、前言Window 表示一个窗口,是一个抽象类,它的具体实现是 PhoneWindow。有时候我们需要在桌面上显示一个类似悬浮窗的东西,这种效果就需要用 Window 来实现。二、Window 和 WindowManager 使用及属性我们对 Window 的操作是通过 WindowManager 来完成的,WindowManager 是一个接口,它继承自只有三个方法的 Vie...原创 2019-04-10 16:36:25 · 485 阅读 · 0 评论 -
Android ViewRootImpl 解析
一、前言本篇文章我们来详细分析一下 ViewRootImpl。二、View 通过 ViewRootImpl 来绘制ViewRootImpl 是一个视图层次结构的顶部,在上一篇文章中我们知道了 ViewRootImpl 实现了 View 与 WindowManager 之间所需要的协议,作为 WindowManagerGlobal 中大部分的内部实现。这个好理解,在 Window...原创 2019-04-17 19:11:11 · 4693 阅读 · 0 评论 -
Android OkHttp 源码解析 - 整体流程分析
一、前言注:本文 OkHttp 源码解析基于 v3.14.2 ,下文中涉及到展示 OkHttp 源码的地方,都采用在 AS 里打开源码并以截图的方式展现出来,这样更加直观。二、简单使用请求分为同步和异步两种,同步请求通过 调用 Call.exectute() 方法直接返回当前请求的 Response,异步请求调用 Call.enqueue() 方法将请求(AsyncCall)添加...原创 2019-04-29 15:07:10 · 373 阅读 · 0 评论 -
Android OkHttp 源码解析 - 拦截器
目录一、前言二、拦截器2.1、RetryAndFollowUpInterceptor2.2、BridgeInterceptor2.3、CacheInterceptor2.4、ConnectInterceptor2.5、CallServerInterceptor三、连接机制3.1 创建连接3.2 连接池四 缓存机制4.1 缓存策略4.2 缓存...原创 2019-05-29 15:44:03 · 727 阅读 · 0 评论 -
Android Retrofit 源码解析
一、前言前面的一篇文章《Android OkHttp 源码解析 - 整体流程分析》已经对 OkHttp 网络请求框架有一个大概的了解。现在我们来学习一下 Retrofit。Retrofit 是 square 公司的另一款广泛流行的网络封装框架,它是对网络请求的封装,不是一个网络框架,retrofit 里面网络框架还是由 okhttp 内核来做。今天同样地对 Retrofit 的源码进行详细...原创 2019-06-19 15:12:08 · 730 阅读 · 0 评论 -
ViewPager + Fragment 懒加载
懒加载介绍所谓的懒加载,其实也就是延迟加载,就是等到该页面的UI展示给用户时,再加载该页面的数据(从网络、数据库等),而不是依靠ViewPager预加载机制提前加载两三个,甚至更多页面的数据.这样可以提高所属Activity的初始化速度,也可以为用户节省流量.而这种懒加载的方式也已经/正在被诸多APP所采用...原创 2018-06-19 09:45:56 · 485 阅读 · 0 评论