![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android源码解析
文章平均质量分 67
tangedegushi
这个作者很懒,什么都没留下…
展开
-
Android设置之Preference源码实现
设置页面超简单实现,同时也是阅读系统setting应用必不可少原创 2023-02-02 17:31:44 · 2189 阅读 · 0 评论 -
Android导航组件Navigation实现原理
对于导航组件的使用方式不是本文的重点,具体使用可以参考官方文档,导航组件框架是通过fragment来实现的,其核心类主要可以分为三个NavGraph、NavHostController、NavHostFragment,这三个类的作用分别是:NavGraph:解析导航图xml获取到的对象,其内部主要维护了一个集合用来存储目的地,当导航到目的地时,会传递进来一个id,这个id有可能导航图xml中fragment的id,也有可能是fragment节点下action节点的id...原创 2022-02-07 18:02:30 · 2860 阅读 · 0 评论 -
Parcelable 原理解析
Android实现进程间通讯,首选的数据传递就是Parcelable了,接下来主要讲的就是Parcelable实现数据传递的原理,对于使用,可以直接在网上百度。对于已经使用过Parcelable的,不知道有没有发现,不管是读数据还是写数据,都涉及到一个对象,这个对象就是Parcel,内部数据传递实际使用的就是这个对象,接下来就来看看是如何实现的。 要分析Parcel,首先要思考的是该如何下手,Parcel主要是用于进程间通讯,那么首先想到就是aidl了,先来编写一个aidl文件:.原创 2021-02-05 19:02:45 · 746 阅读 · 1 评论 -
Lifecycle使用及原理讲解
Lifecycle是Google在2017年的IO大会上推出的 Android Architecture Components中的一个,这个组件的用处就是可以感知Activity的生命周期,先来看下它的简单使用:public class SecondActivity extends AppCompatActivity { private static final String TAG ...原创 2018-12-26 19:03:56 · 8131 阅读 · 0 评论 -
LiveData使用和源码解析
上一篇中讲了Lifecycle,如果你想使用MVP模式开发,那么就可以让P层利用Lifecycle的这个特性,那么P层就可以感知到生命周期,这对P层来说是一个比较大的提升,当然这只是Lifecycle的一种运用,这里要说的是Lifecycle的另一种运用,那就是LiveData的,它的设计使用了观察者模式,当数据变化时可以自动去更新UI,通过对它的使用,,可以让我们更加专注于逻辑的处理。Live...原创 2018-12-28 14:43:07 · 360 阅读 · 0 评论 -
android架构组件之ViewModel
ViewModel所解决的问题 对于当前的界面,可能由于配置、旋转或是其他的原因导致当前的界面异常销毁,当出现这种情况时,界面恢复时也同时需要恢复一些数据,之前的做法就是利用onSaveInstanceState()在异常销毁时将数据保存起来,然后在页面重新启动时通过onRestoreInstanceState()对数据进行恢复,这种做法通常是对于一些简单的数据进行保存。现假如当前界...原创 2019-03-08 17:07:36 · 1140 阅读 · 0 评论 -
RecyclerView(一):预取机制
什么是预取预取就是界面没有展示出来的元素,是下一个即将要展示出来的元素,比如界面展示的是10条目,那么当你滑动的时候,那么即将展示的将是第十一个(还没显示出来),这时候RecyclerView就会提前将需要展示的第一个元素缓存到mCachedViews中(RecyclerView四级缓存中的第二级缓存,后面会单独提取一篇将他的缓存),mCachedViews中缓存的view是不要重新绑定的,也就...原创 2019-03-25 17:04:37 · 4616 阅读 · 0 评论 -
RecyclerView(二):缓存实现原理
概述在说缓存之前,有必要先来了解下RecyclerView的几个内部类:Adapter:负责准备数据;负责创建View;负责将数据绑定到View;ViewHolder:对View进行包装,里面包含了View的一些状态,比如View所处的位置、View的类型(getItemViewType()返回的)、是有需要重新绑定(绑定时会调用到Adapter的onBindViewHolde...原创 2019-04-02 10:38:06 · 1100 阅读 · 1 评论 -
android架构组件之paging源码解析
RecyclerView使用paging就是多了对数据的拉取,使得RecyclerView的数据和显示更加的解耦,RecyclerView对paging的使用多了如下几步: instance = CustomAdapter.getInstance(this); factory = new CustomPageDataSourceFactory<>()...原创 2019-09-05 15:29:03 · 2523 阅读 · 2 评论 -
Fragment之设计思路
对于Fragment,相信做过android的肯定或多或少的都用过,但是你对它的实现原理是否知道,这里我们就从一个大的方向来看看它是如何设计的。Fragment是有生命周期的,和Activity类似,我们可以把fragment看成是activity的一部分,fragment的生命周期其实就是由activity来控制的,只不过fragment内部又做了一些细致的划分,这也就是为什么我们会在frag...原创 2018-11-23 10:41:24 · 535 阅读 · 0 评论 -
Fragment之工作流程
简单使用建议在看这边博文前,先看下这篇:Fragment之设计思路先来看看Fragment的简单使用,然后再跟下去: SimpleFragment fragment = new SimpleFragment(); FragmentManager manager = getSupportFragmentManager(); FragmentTransaction tran...原创 2018-11-23 17:51:44 · 368 阅读 · 0 评论 -
ListView缓存源码分析
ListView是一个ViewGroup,对于ListView的使用需要分为两个部分,一个是ListView本身,二是adapter,他们各自的作用也是很分明的,ListView负责显示和缓存已经显示过的View;而adapter负责创建View和负责显示界面的内容,如果ListView中已经缓存了,就会从ListView将缓存的View取出传递给adapter,这样adapter...原创 2018-07-25 16:14:43 · 360 阅读 · 0 评论 -
从源码理解Android Activity,Window和View的关系
对于Activity肯定是在熟悉不过的了,对于Activity和View的关系最直观的就是在Activity的onCreate()方法中去通过setContentView()来设置显示界面,那是不是就意味着Activity就直接持有View对象呢?答案是不是,那他们又是一个什么样的关系呢?而window又在其中扮演一个什么样的介绍呢?这里将会给到你答案。 在上一篇...原创 2018-06-28 11:33:06 · 389 阅读 · 0 评论 -
Android Application的高级用法及源码分析
对于Android开发的人来说,对Application这个类肯定是不陌生的,我们一般会在这个类中去初始化一些需要在Activity启动之前初始化的资源,或是配置一些整个应用需要用到的东西,虽说用的多,但你不一定对这个类很了解,相信这篇文章肯定会让你对Application有一个全新的认识的。 这里先提两个需要实现的要求,看看你有没有想法: 1、...原创 2018-06-23 12:09:03 · 1951 阅读 · 0 评论 -
Android属性动画(Animator)是如何实现的
与补间动画不同,属性动画是对对象的属性进行修改的,主要涉及到ValueAnimator和ObjectAnimator,其中ObjectAnimator又是继承自ValueAnimator,所以这里从ValueAnimator入手,首先来看一下ValueAnimator的简单用法: private void testValueAnimator(){ ValueAni...原创 2018-06-07 19:32:37 · 1357 阅读 · 0 评论 -
Android补间动画(Animation)是如何运行的
Animation内部计算坐标用的就是Matrix,如果对Matrix还不太清楚的,可以看看Android矩阵变换讲解Matrix。 对于Animation的使用,一般开始执行动画调用的是view.startAnimation(),之后,设置的view开始就会执行相应的动画,我们就以这个为入口来看看整个的流程的怎样的: public void start...原创 2018-06-01 15:24:48 · 987 阅读 · 0 评论 -
Activity中setContentView()是如何解析view
这里就只是分析Activity中的,对于AppCompatActivity中的,虽实现方式有一些不一样,但原理一样。 这里先看一下Activity中的setContentView()方法public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView...原创 2018-04-24 20:13:13 · 1212 阅读 · 0 评论 -
AlertDialog实现原理
对于一个页面的窗口展示,很多时候都可以理解为是一个activity,这样理解没错,但更确切的说window才是负责页面展示的,那为什么可以理解为一个页面就是一个activity呢?这是由于activity持有window对象,activity负责加载布局并将布局添加到window对象中。这里需要想个问题,dialog的显示并不由activity来控制,所以这里可以推测dialog的显示应该是由wi...原创 2018-09-28 20:02:33 · 1342 阅读 · 0 评论 -
Fragment之setRetainInstance详解
Fragment之setRetainInstance详解对于setRetainInstance()这个方法大多数人还是比较陌生的,之前我也不太理解,只是了解个大概,就是在配置改变时,Fragment不会被重新创建,这里的配置我们就以横竖屏切换为例,这边文章将会带你从源码的角度来分析,基于support-v4-23.1.0,其他版本的原理是一致的,相信看完之后你会对Fragment销毁时的状态的保...原创 2018-11-21 19:32:15 · 6310 阅读 · 5 评论 -
SharedPreferences源码解析
对于SharedPreferences使用大家肯定都很熟悉,毕竟使用非常的简单,但是使用的过程中应该注意什么问题,这对于大部分人来说可能就不太清楚了。这里先说下需要注意的几点:1、SharedPreferences一经加载,它内部存储的数据就会以Map的形式一直保存在内存中,所以,对于SharedPreferences的使用,应该要分清哪些数据是常用的,哪些是不常用的,常用的保存在一起,不...原创 2018-09-04 20:16:06 · 908 阅读 · 0 评论