自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

胡飞洋的技术积累

公众号:胡飞洋 , “学习后的思考,实践加总结”

  • 博客(75)
  • 收藏
  • 关注

原创 “终于懂了” 系列:组件化框架 ARouter 完全解析(三)AGP/Transform/ASM—动态代码注入

本篇内容较多,前半部分都是在介绍铺垫知识,只有完全理解了才能掌握ARouter框架的核心。其中Gradle、AGP是Android开发中必定使用到的技术点,希望通过对ARouter的学习能更加深刻的理解Android编译构建的过程,以及使用Gradle插件能完成哪些事情。Transform是官方Gradle 插件中提供的API,它能获取和处理被打进dex文件之前的class文件。不过Transform在最新的Gradle插件版本中被废弃了,不过这不影响我们我们对它的学习。

2023-02-20 19:33:44 837

原创 “终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT技术

APT(Annotation Processing Tool),即注解处理器,是javac中提供的编译时扫描和处理注解的工具,它对源代码文件进行检测找出其中的注解,然后使用注解进行额外的处理。注解就像是一个标签,有很多类型,可以贴在某些元素上面进行标记,并且标签上可以写一些信息。APT就是用来处理标签的工具,在编译开始后,可以拿到自己所关心的类型的所有标签,然后根据标签信息和被标记的元素信息,做一些事情。...

2022-08-08 10:18:53 1147

原创 “终于懂了” 系列:组件化框架 ARouter 完全解析(一) 原理详解

我们从路由发起开始使,介绍了整个路由详细过程moduelA通过中间人ARouter把路由信息的存到仓库WareHouse;moduleB发起路由时,再通过中间人ARouter从仓库WareHouse取出路由信息,这要就实现了没有依赖的两者之间的跳转与通信。其中涉及Activity的跳转、服务provider的获取、拦截器的处理等。需要重点理解的是路由框架的整体思路,通过中间人ARouter使用WareHouse加载和获取路由信息;路由信息加载实现原理,各帮助类作用和路由完善过程。(APT(AGP。...

2022-07-25 20:02:07 2060

原创 人生节点 | 2021年终总结&2022年度计划

我是一名Android开发,目前就职业字节跳动。现在转行Android已经五年多了~

2022-01-03 22:06:40 7090

原创 文章断更的这半年,我买了房、拿了大厂offer

阶段目标完成~

2021-12-02 21:31:51 3167

原创 “终于懂了“系列:Jetpack AAC完整解析(五)DataBinding 重新认知

Jetpack AAC 系列文章:“终于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(四)MVVM 架构探索!“终于懂了“系列:Jetpack AAC完整解析(五)DataBinding 架构完善!欢迎关注我的 公 众 号,微信搜索 胡飞洋 ,.

2021-01-31 18:13:06 766 2

原创 “终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索

Jetpack AAC 系列文章:“终于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!…欢迎关注我的 公 众 号,微信搜索 胡飞洋 ,文章更新可第一时间收到。前面三篇介绍了Jetpack 架构组件中.

2021-01-24 21:53:57 2844 8

原创 “终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握

Jetpack AAC 系列文章:“终于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(三)ViewModel 完全掌握!…上一篇介绍了Jetpack AAC 的数据处理组件 LiveData,它是使得 数据的更新 能以观察者模式 被observer感知,且此感知只发生在活跃生命周期状态。 这篇来介绍与LiveData搭配使用的视图模.

2021-01-07 22:12:58 930 2

原创 已往不谏,来者可追 | 2020年终总结

又是一年快要结束,年终复盘与新年规划是要做起来的。前几年总是悔恨刚毕业时浪费了大量宝贵时间,走了不少弯路,无论是工作还是个人成长都是裹足不前。然而,悟已往之不谏,知来者之可追,就从此开始别让以后再去后悔。一、回顾实际上在年初时没指定清晰的规划,只有一个大致的持续技术学习的目标。在年中的时候,做了一次回顾和计划:2020上半年总结1.《艺术探索》的阅读理解及博客输出(10篇);2.开始微信公众号的运营:目前粉丝76;开始掘金博客。3.学习了Glide源码但未输出;学习输出

2020-12-27 20:45:35 1815 6

原创 “终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握

Jetpack AAC 系列文章:“终于懂了“系列:Jetpack AAC完整解析(-)Lifecycle 完全掌握!“终于懂了“系列:Jetpack AAC完整解析(二)LiveData 完全掌握!…上一篇介绍了Jetpack AAC 的基础组件 Lifecycle,它是用于管理Activity/Fragment的生命周期。这篇来介绍基于Lifecycle的用于处理数据的组件——LiveData。一、LiveData介绍1.1 作用LiveData是Jetpack AAC的重要组件,同时.

2020-12-06 22:06:07 973 1

原创 “终于懂了“系列:Jetpack AAC完整解析(一)Lifecycle 完全掌握

一、Android Jetpack 介绍1.1 Jetpack是啥官方定义如下:Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。JetPack更多是一种概念和态度,它是谷歌开发的非Android Framework SDK自带、但同时是Android开发必备的/推荐的SDK/开发规范合集。相当于Google把自己的Android生态重新整理了一番,确立了Android未来的

2020-11-12 12:49:11 3237 3

原创 “终于懂了” 系列:Android组件化,全面掌握

方式一:单工程多module,使用properties来切换app、libraryhttps://juejin.im/post/6844903649102004231问题:0、没法做到代码权限管控,没法做到人员职责划分,每个人可以对任意的组件修改,显然会造成混乱1、数据传递、方法调用:IProvider ,@Route2、组件获取 App生命周期,有,但不灵活3、获取fragment,@Route方式二:多工程、arr依赖https://www.jianshu.com/p/06931c9b7

2020-10-08 15:10:09 2405 4

原创 “终于懂了” 系列:Android屏幕刷新机制—VSync、Choreographer 全面理解

概要:1、刷新频率、2、单缓冲、双缓冲、三缓冲,掉帧3、编舞者 源码4、异步消息、同步屏障背景当我们谈到 布局优化 时,通常都知道 需要减少布局层级。那么较多层级的布局是如何影响布局展示的呢?类似的,页面卡顿是如何产生的呢?在《Window和WindowManager》中介绍window的添加时提到,会 调用ViewRootImpl的setView()方法,setView()方法会调用requestLayout()方法来请求绘制布局,requestLayout()方法内部又会走到schedul

2020-08-21 12:10:29 9335 4

原创 你想要的Android性能优化系列:启动优化

补充:attachBaseContextwindowFocusChange一、概述用户希望应用能够及时响应并快速加载。启动时间过长的应用不能满足这个期望,并且可能会令用户失望。这种糟糕的体验可能会导致用户在 Play 商店针对您的应用给出很低的评分,甚至完全弃用您的应用。本篇就来讲解如何分析和优化应用的启动时间。首先介绍启动过程机制,然后讨论如何检测启动时间以及分析工具,最后给出通用启动优化方案。二、应用启动流程介绍应用有三种启动状态:冷启动、温启动、热启动。冷启动冷启动是指应用从头开

2020-07-22 20:24:49 6065 2

原创 Activity的启动过程详解(基于10.0源码) --《Android开发艺术探索》阅读笔记——第九章

概述话说Android中有四大组件:Activity、Service、BroadcastReceiver、ContentProvider。我们最常接触也是用户直接感受到的就是Activity了,今天来就说说Android启动的执行过程和工作原理。Activity是一种 展示型组件,用于展示给用户一个可以交互的页面。Activity是Android中最重要的组件,对用户来说,所有的Activity就是一个App的全部,而其他组件用户是不能直接感知的。在开发层面,要启动一个Activity可以使用Inten

2020-07-08 21:26:06 4391 6

原创 你想要的系列:网络请求框架OkHttp3全解系列 - (四)拦截器详解2:连接、请求服务(重点)

在本系列的上一篇文章中,我们分析了OkHttp拦截器链中的前三个拦截器:RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor,它们在请求建立连接之前做了一些预处理。详细可参考你想要的系列:网络请求框架OkHttp3全解系列 - (三)拦截器详解1:重试重定向、桥、缓存(重点)。如果请求经过这三个拦截器后,要继续往下传递,说明是需要进行网络请求的(缓存不能直接满足),也就是今天要分析的内容——剩下的两个拦截器:ConnectInterc

2020-06-14 20:46:28 2433 4

原创 你想要的系列:网络请求框架OkHttp3全解系列 - (三)拦截器详解1:重试重定向、桥、缓存(重点)

在本系列的上一篇文章中,我们走读了一遍okhttp的源码,初步了解了这个强大的网络框架的基本执行流程。不过,上一篇文章只能说是比较粗略地阅读了okhttp整个执行流程方面的源码,搞明白了okhttp的基本工作原理,但并没有去深入分析细节(事实上也不可能在一篇文章中深入分析每一处源码的细节)。那么本篇文章,我们对okhttp进行深入地分析,慢慢将okhttp中的各项功能进行全面掌握。今天文章中的源码都建在上一篇源码分析的基础之上,还没有看过上一篇文章的朋友,建议先去阅读 网络请求框架OkHttp3全解系列

2020-05-31 23:34:03 2154 10

原创 你想要的系列:网络请求框架OkHttp3全解系列 - (二)OkHttp的工作流程分析

在本系列的上一篇文章中,我们学习了OkHttp的基本用法,体验了这个网络加载框架的强大功能,以及它非常简便的API。还没有看过上一篇文章的朋友,建议先去阅读 网络请求框架OkHttp3全解系列 - (一)OkHttp的基本使用 。如果我们想要进行get请求,那么使用少量的代码就能实现,如下所示: OkHttpClient httpClient = new OkHttpClient(); String url = "https://www.baidu.com/";

2020-05-18 17:47:03 1582 5

原创 Binary XML file line #: Error inflating class <unknown> --- android:background="@color/divider"

问题点:布局如下: <View android:layout_width="0.5dp" android:layout_height="42dp" android:layout_centerVertical="true" android:layout_marginLeft="120dp" android:background="@color/divider" /&g

2020-05-12 17:41:23 640

原创 升级Glide4.x的问题汇总

错误信息:W/Glide:Failed to find GeneratedAppGlideModule. You should include an annotationProcessor compile dependency on com.github.bumptech.glide:compiler in your application and a @GlideModule annotat...

2020-05-07 13:32:41 7002

原创 你想要的系列:网络请求框架OkHttp3全解系列 - (一)OkHttp的基本使用

文章目录一、引入二、使用方式2.1 get请求2.2 post请求2.2.1 post请求提交String、文件2.2.2 post请求提交表单2.2.2 post请求提交复杂请求体2.4 请求配置项预备知识:HTTP协议详解HTTP请求报文和响应报文OkHttp3是由square公司开发,Android中公认最好用的网络请求框架,在接口封装上做的简单易用,GitHub地址。它有以下...

2020-05-05 19:49:32 7331 7

原创 嵌套滑动通用解决方案--NestedScrollingParent2

之前写过一篇嵌套滑动–NestedScroll-项目实例(淘宝首页缺陷),及CoordinatorLayout 和 AppbarLayout 联动原理,比较了淘宝和京东首页的滑动效果,分析了效果呈现差别的原因,给出了大致的解决方案。当时没有给出demo,只有代码片段,可能导致阅读起来不很清晰,所以这篇就专门再来详细分析相关知识,给出通用的嵌套滑动的解决方案,且附上GitHub的Demo。一...

2020-04-05 22:47:51 10626 6

原创 Bitmap的加载和Cache --《Android开发艺术探索》阅读笔记——第十二章

Bitmap,表示位图,由像素点构成。Bitmap的承载容器是jpg、png等格式的文件,是对bitmap的压缩。当jpg、png等文件需要展示在手机上的控件时,就会解析成Bitmap并绘制到view上。通常处理图片时要避免过多的内存使用,毕竟移动设备的内存有限。那么加载一张图片需要占用多大内存呢?考虑到效率加载图片时缓存策略是怎样的呢?一、Bitmap的加载1.1 Bitmap的内存占...

2020-02-23 21:06:06 2565

原创 Android的线程和线程池--《Android开发艺术探索》阅读笔记——第十一章

Android中的线程形态:AsyncTask、HandlerThread、IntentServiceAndroid中的线程池:ThreadPoolExecutor

2020-01-21 15:34:54 4530 1

原创 面试官:子线程 真的不能更新UI ?

从一个异常说起,”Only the original thread that created a view hierarchy can touch its views.“。结合window、handler两章: private void handleAddWindow() { //子线程创建window,只能由这个子线程访问 window的view Bu...

2020-01-12 18:58:09 7842 10

原创 Android中的动画详解--《Android开发艺术探索》阅读笔记——第七章

/** * 动画 测试 * @author hufeiyang */public class AnimationTestActivity extends AppCompatActivity { private Unbinder unbinder; @BindView(R.id.textView1) TextView textView1; @BindV...

2020-01-11 18:07:10 844

原创 Handler:Android消息机制--《Android开发艺术探索》阅读笔记——第十章

消息机制原理~~~1、threadLocal理解:外界想要在不同thread中存值,就可以threadLocal = new threadLocal,然后然后再不同线程中threadLocal.set(value)就可以了。threadLocal:工具类,set get当前线程T类型的值get():获取当前线程的ThreadLocalMap的取index的Entry的value,index是...

2020-01-11 17:58:55 2686

原创 Window和WindowManager--《Android开发艺术探索》阅读笔记——第八章

文章目录一、Window和WindowManager1.1 window1.2 WindowManager二、window的内部机制2.1 window的添加2.2 window的更新2.3 window 删除三、常见Window的创建过程3.1 Activity的Window创建3.2 Dialog的window创建3.3 Toast的window创建Window,表示一个窗口的抽象的概念;...

2019-12-07 22:24:40 6162 1

原创 监听网络变化--含7.0以上适配

我们知道最早监听网络变化,是通过广播,静态或动态注册广播,处理"android.net.conn.CONNECTIVITY_CHANGE"这个action就可以了intent就可以了。我们发现"android.net.conn.CONNECTIVITY_CHANGE"这个action已经加了注解@Deprecated,不推荐使用了。根据注释说明,7.0及以上静态注册广播(manifest中)...

2019-12-01 18:11:58 3722

原创 AppBarLayout 滑动导致 回弹 的问题解决~

AppBarLayout快速滑动导致回弹的解决方案CollapsingToolbarLayout完美解决AppBarLayout的滑动问题自定义AppBarLayout.Behavior,不处理Flinging即可。public class AppBarLayoutBehavior extends AppBarLayout.Behavior { private static fin...

2019-11-14 23:20:04 1245

原创 View的工作原理--《Android开发艺术探索》阅读笔记——第四章

文章目录1、ViewRoot 和 DecorView2、 MeasureSpec2.1MeasureSpec2.1MeasureSpec和LayoutParams的对应关系3、View的工作流程3.1Measure过程3.2Layout过程3.3Draw过程4、自定义View4.1自定义view的分类4.2 自定义view 注意点4.3 例子4.4 自定义view的思想1、ViewRoot 和 ...

2019-11-10 16:37:27 3667

原创 PopupWindow的show 7.0以后的适配

PopupWindow的show 7.0以后的适配,如下。PopupWindow是在vTarget下方展示的,PopupWindow的上边对齐vTarget的上边,高度是vTarget的上边到屏幕底边。showAtLocation()方法第二个参数Gravity.TOP | Gravity.LEFT表示从屏幕上边show,后面是偏移量。 if (mPopupWindow != null &...

2019-10-14 18:20:57 445

原创 嵌套滑动--NestedScroll-项目实例(淘宝首页缺陷),及CoordinatorLayout 和 AppbarLayout 联动原理

目录一、项目实例--电商首页二、CoordinatorLayout 和 AppbarLayout 联动原理刚复习完View事件分发、滑动冲突--《Android开发艺术探索》阅读笔记——第三章part2,接着想起前段时间项目中首页重构,遇到的嵌套滑动问题,以及CoordinatorLayout 和 AppbarLayout 联动原理。去学习了下先关知识。在此记录一下,备忘~学...

2019-10-04 17:29:09 5009 3

原创 View事件分发、滑动冲突--《Android开发艺术探索》阅读笔记——第三章part2

目录一、事件分发1、事件传递规则2、源码分析1)Activity的分发过程:2)顶级View(ViewGroup)的分发过程:分发规则的伪代码来源的详细说明3)view的处理过程:主要是onTouchListener、OnTouchEvent、onClick的关系二、滑动冲突1、冲突场景2、解决原理3、举个例子View的事件分发,指的是 在多层级Vie...

2019-10-02 18:51:04 1454

原创 加载xml时InvocationTargetException异常

android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating class io.silvrr.installment.common.view.ArcView Caused by: android.view.InflateException: Binary ...

2019-09-26 18:05:32 3778

原创 曝光埋点方案:recyclerView中的item曝光逻辑实现

目录一、曝光埋点 的问题点二、曝光逻辑分析三、曝光逻辑代码说明 电商app的首页,一般是可滑动列表,当用户上下滑动时,列表中的item可能会多次出现在屏幕上。某个item从出现到消失的过程大于某一时间(比如1s),就认为是一次曝光。数据分析同事对这些曝光数据的分析,可用于针对用户进行商品喜好的推荐。那如何实现 列表(recyclerView)中item的曝光埋点呢...

2019-09-01 19:21:12 6813 4

原创 recyclerView 横条指示器——仿淘宝菜单模块

电商首页菜单模块,可以横向滑动,底部的滑动位置指示器 如何实现呢?下图是淘宝首页的示例。首页思路很清晰:1、横向滑动recyclerView: 内容长度w1 大于recyclerView的视图长度w2(这里就是屏幕宽度),两者差值就是在屏幕外的长度。2、位置指示器: 固定的灰色背景 理解为 对应 recyclerView 内容长度w1,可滑动的 橙色指示器 对应recycl...

2019-08-29 14:23:25 4690 6

原创 自定义view:TextSwitcher使用、源码分析(todo)

一、实现效果就是一个列表的多条信息,上下切换展示,上下两条挨着滑动。实现方法,考虑是 两个TextView 使用动画,不断更新text内容。二、TextSwitcher的使用下面代码看到,是集成自TextSwitcher的自定义view。主要:1、 通过setFactory()设置 用于获取 两个切换view的view工厂,然后重写Factory的makeView()方法...

2019-07-22 22:13:47 566

原创 自定义view:信息飘窗/弹幕——AutoSwitchTextView

一、实现背景项目中,闪购页面 用于自动切换 展示 购买信息,就是那种 “xxx 10s 买了huawei p30 ” 然后自动翻滚上去,接着底部向上滑出下一条。效果如下图。(感觉有点像连续多个Toast) 也可参考小红书的闪购页面~即,从下面较快的出现,停留展示一会,在缓慢的向上滑出。二、实现思路一开始想的是,使用TextSwitcher实现,因为之前做过类似的文字切...

2019-07-16 17:32:45 1018

原创 自定义view:ProgressBar 前景色、背景色、平滑显示进度(简略版)

一、要实现的效果:1、底色;2、进度色(有斜条纹);3、有文字显示状态;4、平滑地展示进度(有前进的过程)。二、实现如下:1、布局使用FrameLayout + textView实现文字状态显示。ProgressBar的 属性android:progressDrawable中设置 底色、进度色(实际就是让设计切的一张图片,clip标签可以实现进度显示效果)。 ...

2019-07-08 17:42:11 2217

空空如也

空空如也

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

TA关注的人

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