Android
文章平均质量分 58
薛之谦赛高
这个作者很懒,什么都没留下…
展开
-
Fragment 切换源码分析
最近在公司项目代码中看到了手动调用 commitAllowingStateLoss 的地方,简单看了下这部分代码发现新版本的 fragment 切换实现的还是很精巧的,有必要对源码进行下详细的分析,在这里记录下吧。先从简单的 commit 开始inline fun FragmentManager.commit( allowStateLoss: Boolean = false, body: FragmentTransaction.() -> Unit) { val tran原创 2021-10-16 19:36:27 · 235 阅读 · 0 评论 -
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 · 421 阅读 · 0 评论 -
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 · 146 阅读 · 0 评论 -
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 · 217 阅读 · 0 评论 -
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 · 151 阅读 · 0 评论 -
LeakCanary 原理分析
LeakCanary 原理分析Java引用1.强引用(当我们创建一个对象时,默认创建的就是强引用。只要强引用还存在,垃圾回收器就算抛出OOM,也不会回收强引用引用的对象。)2.软引用(SoftReference,当内存不足时垃圾回收器会回收被引用的对象)3.弱引用(WeakReference,当GC时无论内存是否足够垃圾回收器都会回收掉被引用的对象)4.虚引用 (PhantomReference,基本不会用到。)怎么使用?LeakCanary.refWatcher(application)原创 2021-06-09 17:54:37 · 277 阅读 · 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 · 881 阅读 · 1 评论 -
Android点击事件分析
本文章略过从activity传递来的点击事件,直接分析ViewGroup和它的父类View的事件传递逻辑首先从ViewGroup的dispatchTouchEvent开始分析,核心逻辑已经在代码段中做了解释: @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mInputEventC...原创 2020-03-21 17:49:27 · 275 阅读 · 0 评论 -
RxJava源码分析
RxJava源码分析大学的时候实习接触了RxJava+Retrofit这种框架使用,工作后主要内容是安全相关就没再接触过了,最近刚好假期有时间,就从源码角度分析一下吧。首先贴一段我写的demo,逻辑非常简单:RetrofitUtil.getInstance().initRetrofit().getNewsData() .subscribeOn(Schedule...原创 2019-10-07 14:29:45 · 140 阅读 · 0 评论 -
从AOSP源码WifiStateMachine入手分析Android状态机设计思想
最近独立开发了项目的一个部分,关于设计模式方面总是经过很多改动也没有得到最理想的结构,刚好借着这个机会详细了解一下Android的状态机设计思想,选取的demo代码就是WifiStateMachine,为了能详细的剖析该设计思想,将WiFi处理逻辑相关的代码尽可能的忽略,只抓住该类的设计模式进行分析。原创 2019-10-20 13:10:02 · 398 阅读 · 0 评论 -
Android ScheduleExecutorService源码解析
最近全投了一个难度很大的项目,使用的还是不太熟悉的C语言,目前终于基本开发完了,近期没那么忙了,这期间之前的一个项目在线程池部分出现了问题,根本原因还是对线程池的理解不够深引起的,因此今天分析下线程池的使用和源码。上一个项目创建线程池使用的是:Executors.newScheduledThreadPool()即:ScheduledThreadPoolExecutor,这个类中schedu...原创 2019-12-22 22:06:02 · 349 阅读 · 0 评论 -
Android获取地理位置解析
近期一个项目用到了该功能,因此进行了比较详细的研究,在这里整理一下。首先指的一提的是,Android Q版本之后,定位权限有一个改动就是,如果是后台服务想要获取地理位置信息的话,需要申请新的权限ACCESS_BACKGROUND_LOCATION ,如果不想申请该权限进行定位的话,需要将服务切换为前台服务,如何切换的代码在github地址上,附在本文最后。接下来进行位置监听的代码分析:想要获...原创 2019-11-17 01:35:30 · 1285 阅读 · 0 评论