技术博客
文章平均质量分 58
薛之谦赛高
这个作者很懒,什么都没留下…
展开
-
Fragment 切换源码分析
最近在公司项目代码中看到了手动调用 commitAllowingStateLoss 的地方,简单看了下这部分代码发现新版本的 fragment 切换实现的还是很精巧的,有必要对源码进行下详细的分析,在这里记录下吧。先从简单的 commit 开始inline fun FragmentManager.commit( allowStateLoss: Boolean = false, body: FragmentTransaction.() -> Unit) { val tran原创 2021-10-16 19:36:27 · 208 阅读 · 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 · 384 阅读 · 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 · 124 阅读 · 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 · 192 阅读 · 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 · 122 阅读 · 0 评论 -
LeakCanary 原理分析
LeakCanary 原理分析Java引用1.强引用(当我们创建一个对象时,默认创建的就是强引用。只要强引用还存在,垃圾回收器就算抛出OOM,也不会回收强引用引用的对象。)2.软引用(SoftReference,当内存不足时垃圾回收器会回收被引用的对象)3.弱引用(WeakReference,当GC时无论内存是否足够垃圾回收器都会回收掉被引用的对象)4.虚引用 (PhantomReference,基本不会用到。)怎么使用?LeakCanary.refWatcher(application)原创 2021-06-09 17:54:37 · 233 阅读 · 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 · 685 阅读 · 1 评论 -
Java基础知识点复习总结
1.线程池提交任务submit和execute的区别AbstractExecutorService中submit的实现如下: /** * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ publ...原创 2020-04-24 22:17:01 · 261 阅读 · 0 评论 -
Android ScheduleExecutorService源码解析
最近全投了一个难度很大的项目,使用的还是不太熟悉的C语言,目前终于基本开发完了,近期没那么忙了,这期间之前的一个项目在线程池部分出现了问题,根本原因还是对线程池的理解不够深引起的,因此今天分析下线程池的使用和源码。上一个项目创建线程池使用的是:Executors.newScheduledThreadPool()即:ScheduledThreadPoolExecutor,这个类中schedu...原创 2019-12-22 22:06:02 · 307 阅读 · 0 评论 -
Android synchronized、Lock区别浅析
近期一个项目接触到了并发读写,需要对Android同步机制有一定了解。首先说下synchronized和Lock类的区别吧。首先是存在层次,synchronized是java的关键字,而Lock是一个java的类,synchronized是jvm自动释放的,而lock必须在finally中手动释放。synchronized不能在等待过程中响应中断,lock可以。synchronized不能知...原创 2019-11-24 14:41:05 · 1489 阅读 · 0 评论 -
Android获取地理位置解析
近期一个项目用到了该功能,因此进行了比较详细的研究,在这里整理一下。首先指的一提的是,Android Q版本之后,定位权限有一个改动就是,如果是后台服务想要获取地理位置信息的话,需要申请新的权限ACCESS_BACKGROUND_LOCATION ,如果不想申请该权限进行定位的话,需要将服务切换为前台服务,如何切换的代码在github地址上,附在本文最后。接下来进行位置监听的代码分析:想要获...原创 2019-11-17 01:35:30 · 1214 阅读 · 0 评论 -
从AOSP源码WifiStateMachine入手分析Android状态机设计思想
最近独立开发了项目的一个部分,关于设计模式方面总是经过很多改动也没有得到最理想的结构,刚好借着这个机会详细了解一下Android的状态机设计思想,选取的demo代码就是WifiStateMachine,为了能详细的剖析该设计思想,将WiFi处理逻辑相关的代码尽可能的忽略,只抓住该类的设计模式进行分析。原创 2019-10-20 13:10:02 · 370 阅读 · 0 评论 -
RxJava源码分析
RxJava源码分析大学的时候实习接触了RxJava+Retrofit这种框架使用,工作后主要内容是安全相关就没再接触过了,最近刚好假期有时间,就从源码角度分析一下吧。首先贴一段我写的demo,逻辑非常简单:RetrofitUtil.getInstance().initRetrofit().getNewsData() .subscribeOn(Schedule...原创 2019-10-07 14:29:45 · 122 阅读 · 0 评论 -
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 · 138 阅读 · 0 评论 -
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 · 107 阅读 · 1 评论 -
VirtualAPK初步解析
VirtualAPK的简单梳理最近某个项目使用到了插件化,突然想起来之前一直想好好学习下插件化,总是忘记,刚好借着这个机会好好研究一下。这里就根据滴滴的VirtualAPK进行解析吧,基本原理都大同小异。滴滴开源项目的源码:https://github.com/didi/VirtualAPK可以直接下载,想要深入理解插件化技术,还需要配合AOSP进行解析,Android官网给出的下载建议...原创 2019-09-28 15:27:09 · 302 阅读 · 0 评论