自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Fragment 切换源码分析

最近在公司项目代码中看到了手动调用 commitAllowingStateLoss 的地方,简单看了下这部分代码发现新版本的 fragment 切换实现的还是很精巧的,有必要对源码进行下详细的分析,在这里记录下吧。先从简单的 commit 开始inline fun FragmentManager.commit( allowStateLoss: Boolean = false, body: FragmentTransaction.() -> Unit) { val tran

2021-10-16 19:36:27 212

原创 android onVsync 刷新

android onVsync 刷新ViewRootImpl 的 invalidate 最终会调用到 scheduleTraversals @Override public void invalidateChild(View child, Rect dirty) { invalidateChildInParent(null, dirty); } @Override public ViewParent invalidateChildInParent

2021-10-13 12:46:27 386

原创 View、ViewGroup绘制流程

View、ViewGroup绘制流程面试的时候被问到的,在这里记录一下View 的 draw 会依次调用 onDraw、dispatchDraw public void draw(Canvas canvas) { final int privateFlags = mPrivateFlags; mPrivateFlags = (privateFlags & ~PFLAG_DIRTY_MASK) | PFLAG_DRAWN; /*

2021-10-13 12:17:38 127

原创 Retrofit + Okhttp源码解析

kotlin 项目中最常用的网络请求模式就是 协程 + retrofit + okhttp协程的挂起、调度可能需要较长的篇幅来介绍这里先分析下 retrofit 和 okhttpRetrofit请求的创建 public <T> T create(final Class<T> service) { Utils.validateServiceInterface(service); if (validateEagerly) { eagerlyVali

2021-10-06 18:35:52 194

原创 RecyclerView + SwipeRefreshLayout 分析

近期面试可能会被问到的知识点,在这里记录下吧首先是用户接受到 ACTION_DOWNRecyclerView.java case MotionEvent.ACTION_DOWN: { mScrollPointerId = e.getPointerId(0); mInitialTouchX = mLastTouchX = (int) (e.getX() + 0.5f); mInitialTouchY =

2021-09-30 21:36:23 125

原创 LeakCanary 原理分析

LeakCanary 原理分析Java引用1.强引用(当我们创建一个对象时,默认创建的就是强引用。只要强引用还存在,垃圾回收器就算抛出OOM,也不会回收强引用引用的对象。)2.软引用(SoftReference,当内存不足时垃圾回收器会回收被引用的对象)3.弱引用(WeakReference,当GC时无论内存是否足够垃圾回收器都会回收掉被引用的对象)4.虚引用 (PhantomReference,基本不会用到。)怎么使用?LeakCanary.refWatcher(application)

2021-06-09 17:54:37 236 1

原创 android Q activity启动流程

activity启动流程梳理调用者进程系统进程调用者进程Activity.java public void startActivityForResult(@RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) { if (mParent == null) { options = transferSpringboardActivityO

2020-08-11 00:39:08 690 1

原创 Java基础知识点复习总结

1.线程池提交任务submit和execute的区别AbstractExecutorService中submit的实现如下: /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ publ...

2020-04-24 22:17:01 264

原创 Android点击事件分析

本文章略过从activity传递来的点击事件,直接分析ViewGroup和它的父类View的事件传递逻辑首先从ViewGroup的dispatchTouchEvent开始分析,核心逻辑已经在代码段中做了解释: @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mInputEventC...

2020-03-21 17:49:27 246

原创 Android ScheduleExecutorService源码解析

最近全投了一个难度很大的项目,使用的还是不太熟悉的C语言,目前终于基本开发完了,近期没那么忙了,这期间之前的一个项目在线程池部分出现了问题,根本原因还是对线程池的理解不够深引起的,因此今天分析下线程池的使用和源码。上一个项目创建线程池使用的是:Executors.newScheduledThreadPool()即:ScheduledThreadPoolExecutor,这个类中schedu...

2019-12-22 22:06:02 312

原创 Android synchronized、Lock区别浅析

近期一个项目接触到了并发读写,需要对Android同步机制有一定了解。首先说下synchronized和Lock类的区别吧。首先是存在层次,synchronized是java的关键字,而Lock是一个java的类,synchronized是jvm自动释放的,而lock必须在finally中手动释放。synchronized不能在等待过程中响应中断,lock可以。synchronized不能知...

2019-11-24 14:41:05 1505

原创 Android获取地理位置解析

近期一个项目用到了该功能,因此进行了比较详细的研究,在这里整理一下。首先指的一提的是,Android Q版本之后,定位权限有一个改动就是,如果是后台服务想要获取地理位置信息的话,需要申请新的权限ACCESS_BACKGROUND_LOCATION ,如果不想申请该权限进行定位的话,需要将服务切换为前台服务,如何切换的代码在github地址上,附在本文最后。接下来进行位置监听的代码分析:想要获...

2019-11-17 01:35:30 1231

原创 从AOSP源码WifiStateMachine入手分析Android状态机设计思想

最近独立开发了项目的一个部分,关于设计模式方面总是经过很多改动也没有得到最理想的结构,刚好借着这个机会详细了解一下Android的状态机设计思想,选取的demo代码就是WifiStateMachine,为了能详细的剖析该设计思想,将WiFi处理逻辑相关的代码尽可能的忽略,只抓住该类的设计模式进行分析。

2019-10-20 13:10:02 374

原创 RxJava源码分析

RxJava源码分析大学的时候实习接触了RxJava+Retrofit这种框架使用,工作后主要内容是安全相关就没再接触过了,最近刚好假期有时间,就从源码角度分析一下吧。首先贴一段我写的demo,逻辑非常简单:RetrofitUtil.getInstance().initRetrofit().getNewsData() .subscribeOn(Schedule...

2019-10-07 14:29:45 123

原创 EventBus源码解析

EventBus源码分析这一篇博客来从源码角度分析一下EventBus吧。首先从发布角度分析:使用的话很简单,通过post() 方法发送事件。post代码如下: /** Posts the given event to the event bus. */ public void post(Object event) { PostingThreadState p...

2019-10-05 14:31:33 140

原创 AsyncTask源码分析

AsyncTask分析上一篇博客从Android源码的角度分析了插件化,这一篇挑有工程意义的、面试也常考的AsyncTask分析吧。首先分析一下AsyncTask的成员变量: private static final String LOG_TAG = "AsyncTask"; private static final int CPU_COUNT = Runtime.getRu...

2019-10-01 16:43:58 111 1

原创 VirtualAPK初步解析

VirtualAPK的简单梳理最近某个项目使用到了插件化,突然想起来之前一直想好好学习下插件化,总是忘记,刚好借着这个机会好好研究一下。这里就根据滴滴的VirtualAPK进行解析吧,基本原理都大同小异。滴滴开源项目的源码:https://github.com/didi/VirtualAPK可以直接下载,想要深入理解插件化技术,还需要配合AOSP进行解析,Android官网给出的下载建议...

2019-09-28 15:27:09 303

空空如也

空空如也

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

TA关注的人

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