自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 问答 (6)
  • 收藏
  • 关注

原创 RecyclerView源码讲解系列(三)Layout过程

动画就不过度关注了,主要看下如何填充子View的。在Layout过程中主要执行下面三个方法。

2022-10-07 10:45:32 267 1

原创 RecyclerView源码讲解系列(二)measure 流程

学习measure流程可以帮助你理解为什么有时候给RecyclerView设置wrap_content属性会失效,同时也可以为实现自定义LayoutManager的measure打下基础。本篇使用RecyclerView和LinearLayoutMananger的源码进行讲解。本次源码讲解的目的是搞清楚RecyclerView的measure​规则。

2022-10-02 09:08:46 304

原创 RecyclerView源码讲解系列(一)总览

​从今天开始RecyclerView源码讲解系列正式开始更新,每周一篇。欢迎大家持续关注。RecyclerView是Android中十分重要的视图组件,可以说基本每个APP的主页面都用到了RecyclerView,由此可见其重要性。那么问题来了,如何对RecyclerView做性能优化、并且封装成一个简单易用且功能强大的RecyclerView。那么首先第一步就是先了解RecyclerView,对它的整体设计有一个总览的概念。

2022-09-25 10:39:56 1345

原创 Android Activity从0~1显示界面的过程 基于Android11源码分析

Android Activity显示界面的过程 基于Android11源码分析从Activity的创建开始,因为要显示界面 需要window,window的创建是在Activity创建的时候创建的。我们知道,当我们启动一个Activity时,AMS会通过Binder的方式通知Activtiy所在的进程,并通过H类切换线程到主线程执行,会调用handleLaunchActivity,然后调用performLaunchActivity。Activity中window的创建 attachActivityT

2022-04-12 19:22:49 2817

原创 Android Binder连接池的实现

Android Binder连接池的实现谈谈为什么需要Binder连接池?在andorid开发中涉及到进程间通信时,大部分都选择使用AIDL来实现,AIDL底层又是Binder,AIDL的使用在上一个文章中已经说过了。考虑一下如果我们现在有十个不同的业务模块需要 使用AIDL来进行进程间通信,如果按照AIDL方式一个一个来实现,我们就需要创建十个Service,如果有更多的模块使用AIDL进行IPC,那么就会需要更多的Service,Service是Android四大组件之一,本身就是一种系统资源,我们

2021-12-24 20:08:52 1215

原创 Android 跨进程通信 Binder 工作流程

Android 跨进程通信 Binder 工作流程本篇仅讲述 Binder工作流程, 并不讲解Binder的原理先说明什么是AIDLAIDL 是 android 接口定义语言,全称 Android Interface definition languageAIDL和Binder作用AIDL是基于Binder机制的,使用AIDL可以让SDK自动帮我们生成对应的Binder类。Binder是不同进程之间通信的桥梁。使用AIDL获取Binder实现类使用Android Studio

2021-12-23 23:22:38 1697

原创 并查集实现代码模板

并查集实现代码模板并查集定义const int MAX_N = 99999; //并查集最大数int par[MAX_N];//这个数组存放的是第i个元素的父节点 如果父节点是它本身就代表这是个元素是根节点int ran[MAX_N]; //记录树的高度 为了压缩路径使用初始化void Init(int n){ for(int i=0;i<n;i++) { par[i] = i; //父节点数组都是自己本身 ran[i] = 0; //

2020-11-26 21:34:14 183

原创 图 求最小生成树 Prim Kruskral算法

图 求最小生成树 Prim Kruskral算法Prim 算法(和Dijkstra算法极像)寻找一个到最小生成树集合距离最近的点把这个点加入到最小生树集合中再用刚刚加入的点去更新集合到集合外的点的最短距离 重复步骤2 (共迭代n(顶点个数)次)//时间复杂度 O(V^2) 适合稠密图 用邻接矩阵#include<iostream>using namespace std;const int INF=0x3f3f3f;const int MAX_V = 600;int

2020-11-26 21:32:35 247

原创 图的五种求最短路径算法(Dijkstra、堆优化Dijstra、Bellmon-Ford、SPFA、Floyd-Warshall)

图的五种求最短路径算法(Dijkstra、堆优化Dijstra、Bellmon-Ford、SPFA、Floyd-Warshall)V代表顶点个数 E代表边数Dijkstra算法 适合正权(不含负权)稠密图 时间复杂度为O(V^2) 只与顶点个数有关 慎用邻接矩阵 需要考虑初始化为INF 有向图和无向图 重边 和 自环//Acwing 849#include<iostream>using namespace std;const int V=1e3;//最大顶点个数c

2020-11-25 20:46:41 541

原创 图论数据结构和基础算法

图论数据结构和基础算法1、数据结构(以下文章中V代表顶点数,E代表边数)图常用的两种数据结构邻接矩阵使用矩阵表示图的连接情况,对于无权图,我们可以用0代表两点之间不连接,1代表两点之间连接。对于有权图,我们可以定义一个极大值INF,来代表两个点不连接,使用权值代表两点连接,这样既存储了权值又存储了两点是否连接。//定义一个二维数组 用fill函数赋值int adj[MAX_V][MAX_V];fill(adj,adj+MAX_V*MAX_V,INF);优点: 可以在常数时间O(1)内

2020-11-23 19:44:36 293

空空如也

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

TA关注的人

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