自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

搬砖的老牛

近期将个人有道云笔记中所记录日常代码阅读笔记部分公开至csdn博客,所有原创博客文字描述均较少,主要以代码加流程图形式体现,代码段中添加关键注释

  • 博客(71)
  • 资源 (9)
  • 收藏
  • 关注

原创 update_engine简介

近期猛然发现公司的项目都已经换成了AB升级,AB升级之前一直有所了解,只是一直都没有去仔细查看过其具体升级流程,这两天捋了捋,简单整理下。AB升级(谷歌官网叫法无缝更新)是自android7.0开始新增的一种android设备升级方式,只是这种方式对设备存储要求高,所以之前没有怎么被国内手机厂商采用。简而言之:系统同时存在两套system分区,一套处于休眠状态不可使用,一套处于使用状态,两者通过slot的概念来做区分,在设备启动引导阶段通过特殊标记位确定启动哪个system,当有可用升级版本时候,客

2021-02-25 23:43:39 4834 2

原创 Doze模式简介

Doze模式是自Android 6.0开始引入的两项省电功能的其中之一,还有一个就是appstandby,通过管理应用在设备未连接至电源时的行为方式,帮助用户延长电池寿命。当用户长时间未使用设备时,低电耗模式会延迟应用的后台 CPU 和网络活动,从而降低耗电量。应用待机模式会延迟用户近期未与之交互的应用的后台网络活动。当设备处于低电耗模式时,应用对某些高耗电量资源的访问会延迟到维护期。如果用户未插接设备的电源,在屏幕关闭的情况下,让设备在一段时间内保持不活动状态,那么设备就会进入低电耗模式。在低电耗模式

2021-02-18 23:21:52 13155 1

原创 android系统更新原理简介

简介:Android系统更新简而言之就是将升级包从服务器下载到本地然后对当前系统进行升级的过程,主要包括三大块:升级包、应用层、recovery层。主要功能流程如下如所示:升级包:版本编译完成后会生成target_file,这里的名称是:ota_target,升级包就是使用源版本的target_file跟目标版本的target_file通过imgdiff/bsdiff工具完成两个img文件的对比差分,做出升级所需的.new.dat、.patch.dat、.transfer.list文件,目

2020-11-24 23:16:36 3470 6

原创 android输入法架构解析

android输入法架构解析简介:前阵子接手维护了一个密码键盘的项目,之前还没有接触过android输入法这块的知识点,所以在熟悉项目的同时将android系统输入法实现框架整理了一遍,记录在此.整个输入法架构可以简单划分为主要三块:1.android输入法管理服务InputMethodManagerService(IMMS)2.android输入法管理InputMethodManager(IMM)与当前输入控件(EditText)3.输入法IME 简要示意图如下:几个主要类关系图如下:

2020-10-18 13:30:16 2763

原创 免源码编译将framework导入studio调试

#### 概述以前的工作中较少涉及framework层代码的修改,需要去查看framework代码时候主要是查找问题和了解系统层实现原理,如今工作中会涉及到framework层代码的修改维护,这就必须要有个好的工具和环境能够实现framework代码的轻松调试。网上找到的方法基本都是在源码编译完成后通过再次编译idegen来实现,这种方法有个最大的弊端就是必须先将源码完整编译一遍,然后再次编译idegen,之后才能够导入studio,导入还需要做些设置和选择,这里介绍一种不需要事先进行源码编译的方法,我使

2020-08-08 18:46:11 394

原创 SettingsProvider源码流程解析

简介:前阵子遇到个问题,OTA升级之后设置中的默认设置项发生了改变,后来查找发现设置中该设置项是通过读取系统数据库中的数据来决定选项是否开启,所以顺带查看了一下SettingsProvider源码,后来发现问题跟SettingsProvider没关系,但还是抽时间将阅读内容整理记录下来。模块总览:该模块主要用于记录一些重要的系统数据,模块代码位于:\frameworks\base\packages\SettingsProvider代码不多,就几个java文件,围绕一个SettingsProvide

2020-05-16 20:56:45 1221 1

原创 一种简单的护眼模式实现

概述:不少健康管理类的app都有护眼模式的功能,在以往做过的项目中也曾经做过护眼模式功能的开发,当时参考和总结了市面上部分护眼类app的实现,顺便利用自身OS厂商可给与系统权限的优势实现了护眼模式,现简单记录如下。实现原理android自7.0之后提供了一个夜间模式的功能,只是该功能不是所有设备都默认开启,需要依赖硬件条件,所以不是所有7.0以上的设备都支持该功能,如果当前设备支持夜间模式,...

2020-04-04 13:54:21 1879

原创 navigationbar展示位置的获取

概述:之前项目中曾经做过一个功能,需要根据在页面顶部靠边的位置添加一个菜单按钮,按钮点击后弹出popwindow,如果设备显示导航栏navigationbar,当导航栏显示在底部的时候,菜单键显示在页面左上角,当导航栏不在底部,而是在左右两侧的时候,菜单键总是显示在导航栏的对侧。解决思路:当进入页面的是,需要在页面的oncreate中根据导航栏的位置来设置菜单键的位置,经过查找,好像没有开...

2020-04-03 22:43:52 948

原创 android绘制draw流程分析

概述:之前分析过一个activity的启动到显示流程,具体显示流程中分析过测量与布局流程,这里对具体的绘制渲染流程进行具体的分析。绘制的起始还是从ViewRootImpl开始,在进入到view之后会根据根据是否有边缘效果稍作区分主要包括以下几点:绘制背景如果存在边缘效果的话,保存画布图层用于给边缘效果做准备调用ondraw实现具体的绘制流程绘制子view如果存在边缘效果的话,绘制边缘...

2020-04-03 18:43:18 898

原创 总结activity启动过程中View,ViewRootImpl关系

近段时间查看android的布局流程一块代码时间较多,发现频繁使用到一个类ViewRootImpl,加之曾经有仔细分析过activity启动过程,和activity的setContentView之后的显示过程,但是一直没有作为一个整体连贯起来,后来在分析布局流程中,发现诸多疑惑比如:ViewRootImpl是怎样跟布局中的所有子View关联起来的View中的mAttachInfo什么时候初始...

2020-03-24 18:37:05 1703 1

原创 基于FrameLayout的onLayout分析

概述:之前分析过activity调用setContentView之后的流程和基于FrameLayout的onMeasure流程分析,onMeasure流程走完之后,布局文件中的各个控件的宽度和高度就都测量完成了,接下来就是布局了,布局的功能就是确定每个控件的摆放位置,这里也就是上下左右,left,top,bottom,right。这一步进行完成后控件在屏幕上的位置就确定了,如下是流程图:调用...

2020-03-19 16:58:06 446

原创 两个recycleview列表左右联动实现

概述:在之前的项目中曾经做过电商分类页面左右两个列表联动的实现,当时的做法是左侧列表使用RecycleView,右侧列表使用的是ScrollView,通过onOverScrolled方法来检测右侧列表是否已经到达了顶部继续下拉还是已经到达了底部继续上滑。这种方式肃然也实现了左右两个列表联动的需求,但是体验上还是有继续优化的空间,之后做了一版优化,左右两个列表都是用recycleview来实现。...

2020-03-09 16:46:58 2714 1

原创 基于FrameLayout的onMeasure分析

概述:之前有分析过activity的显示流程,activity页面是油DecorView来承载,而DecorView是继承自FrameLayout,在activity中调用setContentView后,经过LayoutInflater的解析将布局中的view元素解析出来,最后在onresume过程中,经过一系列的计算后调用到FrameLayout的measure方法对当前页面上的所有view进...

2020-03-08 19:02:02 579

原创 嵌套滑动机制与recycleview惯性滑动更新流程

概述实际项目中通常用到recyclerview的地方,都会有一些嵌套滑动的功能在里面,本篇基于recyclerview的点击事件,对recyclerview中的嵌套滑动流程和recyclerview自身滑动过程界面更新流程进行分析。嵌套滑动嵌套滑动主要涉及如下几个类NestedScrollingChildNestedScrollingParentNestedScrollingChil...

2020-03-05 16:57:58 965

原创 recycleview源码走读

之前项目中大量使用了recycleview,现在乘着空闲时间查阅源码,记录如下。recycleview使用总览recycleview大量使用在需要展现列表的项目中,通常的使用方式如下:1、定义adapter2、在布局文件中添加recycleview3、在activity或者fragment中初始化recycleview,为其设置adapter、layoutmanager。4、获取数据后...

2020-02-10 19:50:23 213

原创 setContentView到界面显示流程

activity界面显示流程相关文件路径:\frameworks\base\core\java\android\app\Activity.java\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java\frameworks\base\core\java\android\vie...

2019-12-21 18:24:44 400

原创 handler发送延迟处理消息的原理

handler实现消息延迟发送的原理handler每次发送消息,不管是否发送空消息,最终都会调用到如下方法中: public final boolean sendMessageDelayed(Message msg, long delayMillis) { if (delayMillis < 0) { delayMillis = 0;...

2019-12-21 15:08:35 4320 1

原创 两种方式解决studio无法下载同步build文件依赖包问题

解决studio无法下载同步build文件依赖包问题:1、根据studio提示:点击show Details可显示如下弹窗:从上可知,是在链接dl.google.com时候无法链接超时了。在cmd终端通过ping查看如下:显示解析的ip和studio里提示的一致,确实无法链接超时了,所以下载不了包也正常。解析的ip已经是修改后的ip,并且得到了返回...

2019-12-05 15:32:26 1784

原创 recycleview中单个item上滑到顶部后悬停顶部的功能实现

需求背景需要将列表中的第二个子view在滑动到顶端之后悬停在顶部,下拉之后取消悬停顶部,实现后效果如下图中所示,当上滑时候需要将列表中的综合销量价格选择栏目固定在顶部,当下拉后恢复列表中位置实现过程:看到这样的需求首先想到的一个词就是recycleview顶部吸附效果,在大略查找recycleview可用方法之后,发现没有这样的方法可以直接使用,google之后搜索到很多相似内容,都是st...

2019-12-04 21:13:02 1147

原创 SwipeRefreshLayout实现原理解析

概述:下拉刷新在实际项目中使用到的频次很高,尤其是带列表的界面中,几乎有列表就会有下拉刷新的功能出现,网上开源的下拉刷新库也较多如PullToRefresh等,近期查看了google提供的SwipeRefreshLayout下拉刷新库,因其功能强大,代码结构简单,便于修改自定义(事实上有很多开源的下拉刷新库也是基于该库进行的修改),专门查看了其实现逻辑,简单记录下来。涉及文件路径:\fram...

2019-12-04 21:06:41 564

原创 抽象工厂模式

模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。为了更清晰地理解工厂方法模式,需要先引入两个概念:产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、...

2019-10-26 16:32:29 121

原创 简单工厂模式

模式动机考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象,此时,就可以使用简单...

2019-10-26 16:32:01 151

原创 工厂方法模式

模式动机现在对该系统进行修改,不再设计一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成,我们先定义一个抽象的按钮工厂类,再定义具体的工厂类来生成圆形按钮、矩形按钮、菱形按钮等,它们实现在抽象按钮工厂类中定义的方法。这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品,如果出现新的按钮类型,只需要为这种新类型的按钮创建一个具体的工厂类就可以获...

2019-10-26 16:31:43 92

原创 建造者模式

模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其...

2019-10-26 16:31:26 118

原创 单例模式

模式动机对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如何保证一个类只有一个实例并且这个实例易于被访问呢?定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可...

2019-10-26 16:31:06 145

原创 桥接模式

模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模...

2019-10-26 16:30:38 189

原创 装饰模式

模式动机一般有两种方式可以实现给一个类或对象增加行为:继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)...

2019-10-26 16:30:16 141

原创 外观模式

模式定义外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。模式结构外观模式包含如下角色:Facade: 外观角色SubSystem:子系统角色类关系图示例代码Shapepackage...

2019-10-26 16:29:53 125

原创 享元模式

模式动机面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。享元模式正是为解决这一类问题而诞生的。享元模式通过共享技术实现相同或相似对象的重用。在享元模式中可以共享的相同内容称为内部状态(IntrinsicState),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrins...

2019-10-26 16:29:37 113

原创 代理模式

模式动机在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。通过引入一个新的对象(如小图片和远程代理 对象)来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身,这种实现机制即 为代理模式,通过引入代...

2019-10-26 16:29:15 79

原创 命令模式

模式动机在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完...

2019-10-26 16:28:46 190

原创 中介者模式

模式动机在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题:系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他所有对象,并进行适当处理。对象可重用性差:由于一个对象和其他对象具有很强的关联,若没有其他对象的支持,一个对象很难被另一个系统或模块重用,这些对象表现出来更像一个不可分割的整体,职责较为混乱。系统...

2019-10-26 16:28:26 126

原创 观察者模式

模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。模式定义观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,...

2019-10-26 16:28:05 138

原创 状态模式

模式动机在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。模式定义状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的...

2019-10-26 16:27:31 168

原创 策略模式

模式动机完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。在软件系统中,有许多算法可以实现某一功能,如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个...

2019-10-26 16:26:12 203

原创 搜索词联想功能实现方案

需求背景:实现搜索框的搜索联想功能,当输入框输入字符时候,立刻进行网络请求,将相关推荐展示在下方的列表中,要求每次展示的一定是当前最新输入的内容的推荐词。实现思路:展示搜索词联想需要满足如下三点:1.搜索框输入内容发生变化需要立刻进行网络请求搜索关联词汇2.搜索词输入内容变化较快,需要保证每次展示出来的联想词都是输入框中最新的输入内容所对应的联想词3.每当有新的请求时候需要及时取消掉...

2019-10-26 15:14:27 12049

原创 实现电商应用分类主页功能

1.需求背景:需要实现类似淘宝,京东app分类主页的功能,左侧列表是一级标题,右侧展示二级标题和三级详细列表,右侧展示列表在底部继续上可以切换到下一个子分类信息,或者在顶部继续下拉切换到上一个子分类信息。效果图如下:三级数据数据模型如下:{ "id":4, "name":"美妆", "sname":"美妆", "level":0, "parent_...

2019-10-26 00:33:11 542

原创 Glide内存占用优化

Glide内存占用优化近期项目中选用glide作为图片加载工具,布局采用NestedScrollView嵌套RecyclerView实现,recycleview中的条目有张图片,通过glide添加,RecyclerView不断下滑不断加载更多item,随着recycleview中的item数量的不断增加,应用内存不断增长直至最后OOM退出查找发现内存暴涨是因为recyvleview中的item...

2019-10-12 19:02:56 4348

原创 android内存泄露处理总结

android内存泄露处理总结导致android发生内存泄露的原因,主要跟activity的生命周期有关,如果某个类持有activity的引用,且它的生命周期是要长于activity的生命周期的,这时就会导致内存泄露。JVM判断对象是否可以回收主要通过两个算法,引用计数法与可达性分析法,从引用计数法来看,activity的引用依然被其他类所持有,所以不能回收,从可达性分析,此时activity...

2019-10-08 19:48:19 316

原创 android inputmanager中事件的传递流程

涉及文件路径:frameworks\base\services\core\java\com\android\server\input\InputManagerService.javaframeworks\base\core\java\android\view\InputChannel.javaframeworks\base\core\jni\android_view_InputChannel...

2019-08-03 13:13:58 1988

嵌入式面试题集锦(带答案、最全)

各大公司常考的嵌入式面试题,史上最全附带答案。

2012-11-25

MP3结构说明

详细讲述了MP3结构,及MP3信息的提取方式。

2012-09-18

QTMP3播放器

基于QT平台的MP3播放器,实现MP3的基本操作,和信息显示,使用系统调用实现。需要由MADPLAY,在linux下。

2012-09-18

QT编程布局篇

具体实例使用了QT中的各类布局,看懂就基本能对布局有个深入了解。

2012-08-11

课程设计-出租车计费器

用汇编语言编写,实现出租车自动计费显示。

2012-01-10

ld中文使用说明

网页上转载的关于ld使用说明的一段,下载下来帮助理解。

2012-01-09

数电课程设计8路抢答器电路图

8路抢答器,可实现开启倒计时、选手按键停止计时、以及报警等功能。

2012-01-09

ARM汇编指令详解

很详细的讲解了ARM汇编的各条语句,实例丰富,通俗易懂。

2012-01-09

GNU-ld连接脚本浅析

较全面、较浅显的讲解了连接脚本,使读者能够在短时间内明白关于连接脚本的描述。

2012-01-09

空空如也

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

TA关注的人

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