自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Jfrog 搭建本地maven仓库以及上传Android库

团队间协同工作,各自负责的功能不一样,有时需要对外提供接口,方便调用自己开发的功能,这时候就需要提供jar或aar包,这时候就会遇到jar或aar的拷贝工作,而且每修改一次都需要重复类似的工作,这时候引入maven本地库就可以很方便的解决这个问题了

2023-03-07 10:18:20 2823 1

原创 Android设置之Preference源码实现

设置页面超简单实现,同时也是阅读系统setting应用必不可少

2023-02-02 17:31:44 2179

原创 Android10 开机向导流程

开机流程中所有涉及到的launcher,包括开机动画后的加载动画以及自定义开机向导

2023-01-30 11:28:27 3189

原创 Android导航组件Navigation实现原理

对于导航组件的使用方式不是本文的重点,具体使用可以参考官方文档,导航组件框架是通过fragment来实现的,其核心类主要可以分为三个NavGraph、NavHostController、NavHostFragment,这三个类的作用分别是:NavGraph:解析导航图xml获取到的对象,其内部主要维护了一个集合用来存储目的地,当导航到目的地时,会传递进来一个id,这个id有可能导航图xml中fragment的id,也有可能是fragment节点下action节点的id...

2022-02-07 18:02:30 2856

原创 Android10 SystemUI系统手势导航

从Android9开始,android系统就添加了系统导航手势,对于现在高版本的手机,有些系统默认就是开启导航手势的,有些还是沿用以前导航栏,但是也是可以在设置中开启导航手势,导航栏会自动消失,这篇文章主要讲解的是系统导航收拾是如何实现的。 对于系统导航手势的实现,android10还是在SystemUI中实现的,在以后的版本中可能就是在Launcher3中,SystemUI是一个系统应用,在SystemServer中启动,先来看下是如何启动的:...

2021-11-02 11:10:01 6329

原创 Android10 InputManagerService本地实现

上一篇Android10 InputManagerService事件输入输出主要是从java层面来看整个系统事件的传递,但并没有去看InputManagerService的实现,这一篇就是来看下实现:public class InputManagerService extends IInputManager.Stub implements Watchdog.Monitor { private static native long nativeInit(Inpu...

2021-10-22 11:36:37 1087

原创 Android10 InputManagerService事件输入输出

InputManagerService管理着屏幕点击以及硬件按钮事件的输入输出,InputManagerService的实现是在native代码中,想要对事件进行处理,那就一定要通过InputManagerService进行注册或是监听。如果A应用要想获取到输入事件,那要怎么和InputManagerService连接起来呢?答案是Socket,其中InputChannel就是对其进行封装,InputChannel的实现同样是native代码,实现的类是NativeInputChannel,...

2021-10-20 18:25:32 4228 2

原创 Android10 AppComponentFactory源码梳理

最近在看Android10里面SystemUI关于手势导航部分,里面使用了dagger依赖注入,一时间找不到dagger初始化实例化的地方,这才有了今天这篇对AppComponentFactory这部分的讲解,AppComponentFactory是Android9加入的,先来整体看下这个类的:/** * Interface used to control the instantiation of manifest elements. * * @see #instantiate...

2021-10-15 13:50:54 5707

原创 Android10 系统发送开机广播时机

这篇文章主要来聊聊系统开机广播是什么时候发送的,在上一篇android10 launcher启动流程聊了launcher启动,最后调用到ActivityThread.handleResumeActivity()将launcher界面显示出来,即将要聊到的开机广播就是沿着这条线继续往下走: @Override public void handleResumeActivity(IBinder token, boolean finalStateRequest, boolean ...

2021-09-28 17:55:49 2666

原创 Android10 launcher启动流程

上一篇说到系统进程SystemServer启动,在SystemServer中会去启动各种系统服务,这里的launcher也是启动的其中一个服务ActivityManagerService去启动的。在android10之前,系统四大组件的启动都是在ActivityManagerService中,在android10中,单独抽出了一个ActivityTaskManagerService,主要负责Activity的管理和调度。这里先来看下ActivityManagerService服务的启动:...

2021-09-27 16:59:40 2383

原创 Android10 系统进程SystemServer

在上一节Android10 系统进程Zygote启动中主要是说了Zygote进程启动,在其中有说到Zygote进程会创建SystemServer进程,并执行其中的main()函数。SystemServer进程承载整个Android framework层的核心服务,这里就先来看看/frameworks/base/services/java/com/android/server/SystemServer.java的main()函数:public static void main(Strin...

2021-09-24 14:34:50 1328

原创 Android10 系统进程Zygote启动

概述 zygote进程可以理解为Android系统的根进程,有了Zygote进程后,在Zygote进程中会创建SystemServer进程,在SystemServer进程中会去初始化Android系统所需的各种系统服务,先看下整体流程: 电源键按下——>bootloader——>kernal——>init——>zygote——>SystemServerbootloader:类似于电脑的BIOS引导程序kernal:an...

2021-09-23 16:45:57 825

原创 Android10 源码编译相关问题

网络上关于源码编译的文章很多,这里就不多赘述了,这里主要是说下在编译中需要注意的地方:1、在搭建环境时,需要注意对版本的要求:1.1、操作系统要求在AOSP开源中,主分支使用Ubuntu长期版本开发和测试的,因此也建议你使用Ubuntu进行编译,下面我们列出不同版本的的Ubuntu能够编译那些android版本:Android版本 编译要求的Ubuntu最低版本 Android 6.0至AOSP master Ubuntu 14.04 An...

2021-09-22 15:46:35 872

原创 Parcelable 原理解析

​ Android实现进程间通讯,首选的数据传递就是Parcelable了,接下来主要讲的就是Parcelable实现数据传递的原理,对于使用,可以直接在网上百度。对于已经使用过Parcelable的,不知道有没有发现,不管是读数据还是写数据,都涉及到一个对象,这个对象就是Parcel,内部数据传递实际使用的就是这个对象,接下来就来看看是如何实现的。​ 要分析Parcel,首先要思考的是该如何下手,Parcel主要是用于进程间通讯,那么首先想到就是aidl了,先来编写一个aidl文件:.

2021-02-05 19:02:45 745 1

原创 android性能优化之布局优化

布局选择概述对于界面优化,需要考虑的主要有两点,测量次数以及过度绘制的问题,这个需要考虑的就是所需选用的布局,所选的布局不同,会直接影响到子布局的绘制次数,下面以常用布局为例,一般情况下:LinearLayout和FrameLayout的子view都是测量一次的,其中LinearLayout有个特殊的情况,就是如果他的子view设置weight属性,这时LinearLayout的子view是会测量两次的,对于RelativeLayout和ConstraintLayout布局,子view都是需要测量两次的,

2020-06-05 11:15:34 264

原创 Android性能优化之耗时方法

应用做完后,有时候会发现应用比较卡或是反应比较慢,这时候就得去排查是什么原因导致的响应慢,我们的第一反应就是哪个函数执行是比较耗时的,那该怎么去排查耗时函数呢,在可能耗时的函数里答应执行时间么,那这个工作量就有点大了,也不利于维护,这里所以分享的就是如何去查找耗时函数,该如何去查找呢?这里先来看下代码实现,后面再来说说实现的原理:public class MethodMonitor implements Runnable { private Handler mLogHandler; pr

2020-05-12 10:55:12 850 1

原创 android仿地铁行进线路图

在坐地铁的时候,能看到有些地铁上是有地铁行进动画和站点到达动画的,最近在做项目的时候,就有一个类似这样的需求,不同的是展示的点有限制,多出来的点是需要是折贴起来的,当需要展示时再拉出来,大致动画如下:看到这样一个动画,你有什么想法呢?对于这个动画,我有一个同事使用的是RecycleView去做的,做出来后差不多有十几个类,里面的逻辑还是比较复杂的,由于同事离职,这里面还有一些问题存在,由我接手...

2020-03-06 11:02:23 2660 2

原创 Arouter原理详解

对于组件化这个东西这里就不进行讲解了,组件化本身的目的是为了解耦,各个组件负责各自的功能,然后把各个组件组合起来就是一个完整的项目了,组合起来的时候,就会涉及到组件间的通讯问题,比如这个module的Activity调用另外一个module的activity,如果是直接调用,那显然他们之间就有了耦合了,为了组件间的解耦,这个时候就可以用到Arouter了,关于Arouter的使用这里可以去Git上...

2019-12-11 16:01:16 762

原创 绕太阳三维旋转动效

先来看下效果图:这个动画的最终效果是支持修改的,比如外围旋转动画在中间停留的时间,外围动画每一次旋转的时间,是否需要中间的太阳,太阳旋转一圈所需要的时间都是可以进行设置的,同时支持点击事件,点击事件分为三种,一是点击中间的太阳,二是点击周边的行星,三是只能点击最前边的行星,如果有手指按在上面,外围的行星动画是会暂停的,同时动画会随着activity生命周期(onStop()和onStart()...

2019-11-26 17:00:15 286

原创 android插件化相关hook及资源加载

概述这篇文章主要讲述的有以下几点:如何hook系统中的一些类,以达到我们想要实现的功能;如何去加载插件中的class文件;如何去加载插件中的资源;要了解插件化,对这几个点是必须要知道的,插件化也是在这几个点的基础上逐渐进行完善的。hook系统中的哪些类1、Instrumentation;2、IActivityManager;3、Handler;Instrumentation...

2019-10-15 11:31:00 552

原创 android架构组件之paging源码解析

RecyclerView使用paging就是多了对数据的拉取,使得RecyclerView的数据和显示更加的解耦,RecyclerView对paging的使用多了如下几步: instance = CustomAdapter.getInstance(this); factory = new CustomPageDataSourceFactory<>()...

2019-09-05 15:29:03 2523 2

原创 android架构组件之paging如何优雅实现加载提示

在使用paging的过程中,使用起来是很方便,但也发现一些问题,比如往下滑的时候,没有加载的提示(数据正在加载中),这个时候就需要我们去处理了,数据加载可能是成功了,可能是失败了,也可能是全部加载完成了,加载过程中还有加载的结果都是需要一个友好的提示的,我们看到好多APP应用都是在item底部会有一个友好的提示,所有这边文章就是来实现如何在底部添加一个友好提示的item,数据加载成功后会自动消失。...

2019-09-04 16:25:02 867

原创 RecyclerView(六):ItemTouchHelper如何实现拖拽和侧滑删除

概述对于RecyclerView子项的滑动或是对item进行装饰前面都已经提到过了,现在就来说说对item的拖拽进行排序和侧滑删除该如何实现,对于这样的功能,RecyclerView是没有直接给我们提供api的,不过提供了工具类方便我们使用,这个类就是这里要说的ItemTouchHelper,这个类已经为我们处理好了相对应的动画效果,但是对应的数据处理就需要我们自己来做,所以,对于这个类的理解和...

2019-04-23 14:37:04 402

原创 RecyclerView(五):SnapHelper对惯性滑动的作用说明

概述SnapHelper可以看做是RecyclerView惯性滑动的一个辅助类,可以帮我们做一些惯性滑动时和滑动后的一些处理,所以对于一些惯性滑动的操作处理就可以优先考虑使用这个类,可以处理的点可以归纳为以下三点:可以监听到滑动时手指抬起的那一刻;指定手指抬起后RecyclerView惯性滑动的item个数;滑动结束后指定item在界面所显示的位置;SnapHelper用到的关键类说...

2019-04-18 17:06:09 3518

原创 RecyclerView(四):ItemDecoration的方法说明和实现原理

ItemDecoration是对item进行装饰的一个抽象类,只要实现它对应的方法就可以实现对应的功能,先来看下这个类:…public abstract static class ItemDecoration {// 在onDraw()方法中被调用到public void onDraw(Canvas c, RecyclerView parent, State state) {onDraw...

2019-04-09 16:40:44 879

原创 RecyclerView(三):LayoutManager职责及相关方法

概述在RecyclerView之前,对于线性布局和网格布局用的基本上是ListView和GridView,到RecyclerView,就不需要这么麻烦了,RecyclerView对于职责划分的很明确,布局相关的就只需要LayoutManager,继承LayoutManager就可以实现你想要的布局,比如android为我们提供的一下几个布局:线性布局:LinearLayoutManager...

2019-04-09 11:26:24 1645

原创 RecyclerView(二):缓存实现原理

概述在说缓存之前,有必要先来了解下RecyclerView的几个内部类:Adapter:负责准备数据;负责创建View;负责将数据绑定到View;ViewHolder:对View进行包装,里面包含了View的一些状态,比如View所处的位置、View的类型(getItemViewType()返回的)、是有需要重新绑定(绑定时会调用到Adapter的onBindViewHolde...

2019-04-02 10:38:06 1096 1

原创 RecyclerView(一):预取机制

什么是预取预取就是界面没有展示出来的元素,是下一个即将要展示出来的元素,比如界面展示的是10条目,那么当你滑动的时候,那么即将展示的将是第十一个(还没显示出来),这时候RecyclerView就会提前将需要展示的第一个元素缓存到mCachedViews中(RecyclerView四级缓存中的第二级缓存,后面会单独提取一篇将他的缓存),mCachedViews中缓存的view是不要重新绑定的,也就...

2019-03-25 17:04:37 4603

原创 android架构组件之ViewModel

ViewModel所解决的问题 对于当前的界面,可能由于配置、旋转或是其他的原因导致当前的界面异常销毁,当出现这种情况时,界面恢复时也同时需要恢复一些数据,之前的做法就是利用onSaveInstanceState()在异常销毁时将数据保存起来,然后在页面重新启动时通过onRestoreInstanceState()对数据进行恢复,这种做法通常是对于一些简单的数据进行保存。现假如当前界...

2019-03-08 17:07:36 1140

原创 LiveData使用和源码解析

上一篇中讲了Lifecycle,如果你想使用MVP模式开发,那么就可以让P层利用Lifecycle的这个特性,那么P层就可以感知到生命周期,这对P层来说是一个比较大的提升,当然这只是Lifecycle的一种运用,这里要说的是Lifecycle的另一种运用,那就是LiveData的,它的设计使用了观察者模式,当数据变化时可以自动去更新UI,通过对它的使用,,可以让我们更加专注于逻辑的处理。Live...

2018-12-28 14:43:07 360

原创 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 8130

原创 Fragment之工作流程

简单使用建议在看这边博文前,先看下这篇:Fragment之设计思路先来看看Fragment的简单使用,然后再跟下去: SimpleFragment fragment = new SimpleFragment(); FragmentManager manager = getSupportFragmentManager(); FragmentTransaction tran...

2018-11-23 17:51:44 367

原创 Fragment之设计思路

对于Fragment,相信做过android的肯定或多或少的都用过,但是你对它的实现原理是否知道,这里我们就从一个大的方向来看看它是如何设计的。Fragment是有生命周期的,和Activity类似,我们可以把fragment看成是activity的一部分,fragment的生命周期其实就是由activity来控制的,只不过fragment内部又做了一些细致的划分,这也就是为什么我们会在frag...

2018-11-23 10:41:24 534

原创 Fragment之setRetainInstance详解

Fragment之setRetainInstance详解对于setRetainInstance()这个方法大多数人还是比较陌生的,之前我也不太理解,只是了解个大概,就是在配置改变时,Fragment不会被重新创建,这里的配置我们就以横竖屏切换为例,这边文章将会带你从源码的角度来分析,基于support-v4-23.1.0,其他版本的原理是一致的,相信看完之后你会对Fragment销毁时的状态的保...

2018-11-21 19:32:15 6297 5

原创 Android studio结合MAT分析hprof文件

对于Android性能优化,其中很重要一块就是内存优化,内存优化主要还是解决内存泄漏问题,我一般分为三步进行排查:1、使用LeakCanary进行初步排查;2、使用Android studio自带的Android Profiler分析;3、使用MemoryAnalyzer(MAT)分析;对于这三步,如果对内存消耗这块没有严格要求,一般使用LeakCarary就可以了。如果对内存...

2018-10-16 10:49:27 8287 2

原创 Android studio导出hprof到MAT工具流程

准备MAT工具:工具地址 : https://www.eclipse.org/mat/这里有两种方式:一是以插件的方式集合到eclipse中,二是直接下载MemoryAnalyzer(免安装);Android studio生成hprof文件:对于生成hprof文件,Android studio 3.0之后的版本和3.0之前的版本可以说是完全不一样的,如果你使用过eclipse开发过...

2018-10-11 19:07:41 10246

原创 AlertDialog实现原理

对于一个页面的窗口展示,很多时候都可以理解为是一个activity,这样理解没错,但更确切的说window才是负责页面展示的,那为什么可以理解为一个页面就是一个activity呢?这是由于activity持有window对象,activity负责加载布局并将布局添加到window对象中。这里需要想个问题,dialog的显示并不由activity来控制,所以这里可以推测dialog的显示应该是由wi...

2018-09-28 20:02:33 1341

原创 android之gradle版本差异化打包

对于版本差异化打包,如果实际工作中没怎么用到,对这块一般不会很熟悉,记得在上一家公司的时候,一个主版本公司自己用的,由于公司和其他的公司有合作,其他公司对于app要求定制化,总体上的功能没怎么变化,主要的变化还是界面(背景,图片还有一些文字之类的),一开始采用的方案是基于主版本新建一个工程,刚开始还没什么,但到后面发现问题越来越多了,很不利于维护,工程多了管理起来也很麻烦,不过最开始也是在ecli...

2018-09-27 15:51:03 969

原创 android之Gradle常见使用

这一篇主要是说下gradle的一些常见使用,主要是几点配置:1、配置库工程路径;2、定义gradle额外变量;3、配置签名文件;4、配置apk输出文件名;5、配置清单文件(AndroidMenifest)占位符6、配置不同包名;7、配置全局变量;8、在字符串的xml文件中添加新值。 配置库工程的路径 include ':app', ':netlib','...

2018-09-26 15:57:52 404

原创 android之Gradle构建项目流程

对于android开发,java语言那肯定都是很熟悉了,但对于android项目的构建应该就不是那么的了解了,android项目的构建是通过gradle,而gradle所使用的语言确实groovy,这对于很多人来说可能就不是那么的了解,groovy是基于java语言,并且也是支持java语言的,所以我们在gradle中使用java语言也是可以编译通过的。对于刚接触java语言的人来说,程序的入...

2018-09-21 16:55:14 3130

空空如也

空空如也

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

TA关注的人

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