android
文章平均质量分 92
gdutxiaoxu
这个作者很懒,什么都没留下…
展开
-
【原理篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview
讲解之前,先简单说一下嵌套滑动的一些概念。(熟悉这个的哥们可以直接跳过这个)说到嵌套滑动,大家应该都不陌生。他是 Google 在 5.0 之后推出来的 NestedScroll 机制。可能初学者会有这样的疑问?想比较于传统的事件分发机制,NetstedScroll 机制有什么优点。在传统的事件分发机制 中,一旦某个 View 或者 ViewGroup 消费了事件,就很难将事件交给父 View 进行共同处理。而 NestedScrolling 机制很好地帮助我们解决了这一问题。原创 2022-09-20 19:20:13 · 1876 阅读 · 2 评论 -
【踩坑】Android 编译线程爆了, gradle 内存 OOM 解决之路
可以看到,我们这次的问题解决思路大概是这样的。从 error 日志排查发现,很有可能跟 transfrom 相关排查项目里面 transfrom 相关的,有没有相关的dump JVM 内存,看线程相关的,观察是否异常debug gradle assemble 任务,观察 线程名包括Thread 的调用堆栈分析 调用堆栈,找到原因结合 gradle 官方代码,查看问题是否已经解决那有没有更快的方法呢?原创 2022-09-16 16:53:50 · 1145 阅读 · 1 评论 -
Android gradle dependency tree change(依赖树变化)监控实现
在项目开发中,会有很多第三方依赖,通过 gradle 引入进来的。比如 androidxDesignVersion、androidxSupportVersion、 rxjava2Version、 okhttpVersion 等第三方库。有时候第三方库改到了或者升级了,我们并不能及时发现,往往需要等到出问题的时候,去排查的时候,才发现是某个依赖版本改动导致的。这时候其实是有点晚了,如果能够提前暴露,那么我们能够大大地减少风险,因此我们希望能够监控起来。原创 2023-09-21 17:25:21 · 749 阅读 · 2 评论 -
Android 滑动事件消费监控,Debug 环境下通用思路
Android 开发中,经常会遇到滑动事件冲突。在一些简单的场景下,我们如果能够知道是那个 View 拦截了事件,那我们能够很容易得解决。解决方法通常就是内部拦截法或者外部拦截法。[ViewPager,ScrollView 嵌套ViewPager滑动冲突解决](https://blog.csdn.net/gdutxiaoxu/article/details/52939127)然而,在一些复杂场景下,比如在直播间。很多时候,我们很难定位到是哪个 View 拦截了事件。有时候排查起来比较困难,于是,我原创 2023-09-19 16:52:03 · 416 阅读 · 0 评论 -
ConstraintLayout 使用详解,减少嵌套 UI, 提升性能
对于初学者来说,可能觉得ConstraintLayout属性多,且属性长而弃用它,那你错失了这个大宝贝。因为在复杂布局,我们会一直用RelativeLayout和LinearLayout去嵌套,因为嵌套的ViewGroup会导致手机多次测量和绘制,从而影响性能,如果嵌套严重可能出现掉帧或卡顿。使用ConstraintLayout一招入魂。一句话概括是:传统布局能实现的,它能轻松实现实现。传统布局不能实现的,它也能实现。原创 2023-01-29 16:58:55 · 1034 阅读 · 2 评论 -
Android面试老生常谈的 View 事件分发机制,看这一篇就够了
我的公众号程序员徐公,四年中大厂工作经验,回复黑马,领取 Android 学习视频一份,回复徐公666,可以获得我精心整理的简历模板,带你走近大厂。在 Android 开发当中,View 的事件分发机制是一块很重要的知识。不仅在开发当中经常需要用到,面试的时候也经常被问到。如果你在面试的时候,能把这块讲清楚,对于校招生或者实习生来说,算是一块不错的加分项。对于工作几年的我们来说,这是必须掌握的,讲不明白,那你回去等通知吧,哈哈。目录大概如下:View 事件分发机制简介View 常见滑动冲..原创 2021-05-24 15:57:17 · 1187 阅读 · 3 评论 -
深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析
本文首发我的微信公众号:程序员徐公前言前一阵子,写了几篇 Android 启动优化的文章,主要是从两个方面论述的。Application 多线程异步加载,以及怎么解决多线程任务依赖的问题首页布局优化,从常规的布局嵌套优化到渐进式加载,再到异步加载。Android 启动优化(一) - 有向无环图Android 启动优化(二) - 拓扑排序的原理以及解题思路Android 启动优化(三)- AnchorTask 开源了Android 启动优化(四)- AnchorTask 是怎么实现的..原创 2021-04-26 15:16:03 · 1077 阅读 · 0 评论 -
2021 如何自学 Android,一位 5 年中大厂的 Android 老哥跟你聊聊
本文首发我的微信公众号:程序员徐公光阴似箭,日月如梭,时间真的过得飞快。 加上实习,从事 Android 开发,差不多有 5 年了,在这里,我分享一下我的经验,在 Android 的学习路上,我是站在巨人的肩膀上成长起来的。大概分为三个部分一、Android 职业规划二、Android 学习路线三、如何进入大厂Android 成长生涯1-3 年前 3 年,我觉得是我们成长最快的时候。尤其是刚开始工作的一年,刚开始接触项目,我们会接触到很多新知识,比较网络框架的封装,Android.原创 2021-04-14 20:47:27 · 2015 阅读 · 17 评论 -
Android WebView 踩坑日记,字体怎么突然变小了???
背景最近,端内在做 webView 统一的时候,个性签名中的 WebView 替换为 CustomWebView 之后,发现字体突然变小。一开始不知道是什么原因,通过二分法查找最近的提交,排查之后,发现是 SignatureWebView 的继承关系从 WebView 修改为 CustomWebView。revert 之后就正常了。于是,我问自己,为什么会这样呢?原因分析我们知道,WebViewSetting 里面是可以修改 WebView 的一些默认设置的。阅读官方文档,发现 setLoad.原创 2021-04-09 15:54:10 · 4976 阅读 · 15 评论 -
Fragment 可见性监听方案 - 完美兼容多种 case
前言本篇文章主要提供一种监听 Fragment 可见性监听的方案,完美多种 case,有兴趣的可以看看。废话不多说,开始进入正文。在开发当中, fragment 经常使用到。在很多应用场景中,我们需要监听到 fragment 的显示与隐藏,来进行一些操作。比如,统计页面的停留时长,页面隐藏的时候停止播放视频。有些同学可能会说了,这还不容易,直接监听 Fragment 的 onResume,onPause。我只能说,兄弟,too young,too simple。下面,让我们一起来实现 fragme原创 2020-11-26 21:54:41 · 4541 阅读 · 1 评论 -
java 代理模式详解
简介代理是什么?代理也称“委托”,分为静态代理和动态代理,代理模式也是常用的设计模式之一,具有方法增强、高扩展性的设计优势。代理的设计理念是限制对象的直接访问,即不能通过 new 的方式得到想要的对象,而是访问该对象的代理类。这样的话,我们就保护了内部对象,如果有一天内部对象因为某个原因换了个名或者换了个方法字段等等,那对访问者来说一点不影响,因为他拿到的只是代理类而已,从而使该访...原创 2018-08-03 20:34:58 · 10291 阅读 · 2 评论 -
ARouter 使用教程
简介ARouter 是阿里开源的,可以看成是 Android 平台中对页面、服务提供路由功能的中间件。ARouter 直接翻译过来就是路由,可以用来映射页面关系,实现跳转相关的功能。在 Android 中,常被用来进行组件化通讯。为什么要使用 ARouter我们知道 Android 中默认为我们提供了跳转的功能,比如 startActivity,startService 等...原创 2018-07-13 19:34:51 · 13298 阅读 · 2 评论 -
Rxjava 2.x 源码系列 - 基础框架分析
前言RxjavaRxAndroid本篇博客讲解的 Rxjava 的原理基于版本 2.1.4,RxAndroid 的原理的版本基于 2.0.2 。基本框架Rxjava 有四个基本的概念Observable (可观察者,即被观察者) Observer (观察者)subscribe (订阅) 通过该方法,将 Observable 与 Observer 关联起来...原创 2018-05-29 20:42:13 · 4626 阅读 · 3 评论 -
git 设置 mergetool,difftool 为 BeyondCompare
卖一下广告,欢迎大家关注我的微信公众号,扫一扫下方二维码或搜索微信号 stormjun,即可关注。 目前专注于 Android 开发,主要分享 Android开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等。 Git下载及配置环境变量Git 命令行教程及实例教程Git ssh 配置及使用 git ssh 配置多个账户Git config 使用说明Git 配置别名 —— ...原创 2018-05-25 19:07:08 · 9587 阅读 · 0 评论 -
Android 8.0(Android O) AccountManager 行为变更
前言在公司的项目中,使用 AccountManager 统一管理//获取帐号列表/或对应帐号类型的某个帐号AccountManager#getAccounts()/getAccountsByType(String accountType) 获取不到 AccountManager 里面的信息。第一时间的反应是去查询官方 Android O 的行为变更,果然,Android O 对 Ac...原创 2018-04-26 20:54:26 · 3949 阅读 · 0 评论 -
Android Hook 机制之简单实战
简介什么是 HookHook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。Hook 分类1.根据Android开发模式,Native模式(C/C++)和Java模式(Java)区分,在Android平台上 Java层级的Hook; ...原创 2019-08-06 10:11:44 · 59842 阅读 · 9 评论 -
Android 正 N 边形圆角头像的实现
卖一下广告,欢迎大家关注我的微信公众号,扫一扫下方二维码或搜索微信号 stormjun,即可关注。 目前专注于 Android 开发,主要分享 Android开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等。前言在上一篇博客 Android 圆形头像的两种实现方式 中,我们塔伦了实现圆形头像的两种实现方式。第一种: 使用 Paint 的 Xfermode 实战第二...原创 2018-03-27 00:47:46 · 2430 阅读 · 0 评论 -
Android 圆形头像的两种实现方式
Android 圆形头像的两种实现方式前言这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的。圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式:第一种: 使用 Paint 的 Xfermode 实战第二种方法: 使用 BitmapShader 实现第一种: 使用 Paint 的 Xfermode 实战圆形头像...原创 2018-03-22 19:30:12 · 12303 阅读 · 0 评论 -
Android 二次封装网络加载框架
这篇博客讲解了怎样封装实现统一的网络框架。原创 2017-11-19 21:42:42 · 5027 阅读 · 2 评论 -
Android AIDL 教程 (一)—— 简单的示例
AIDL(Android Interface Definition Language)是Android系统自定义的接口描述语言。可以用来实现进程间的通讯。在 Android 中,要实现进程间的通讯,一般来说,有以下几种方式:使用 Bundle最常见的的是我们通过特定的 Action 或者 data 启动另外一个应用的 Activity 或者 service。我们可以将要传递的数据封装在 bun原创 2017-10-26 20:22:55 · 15547 阅读 · 5 评论 -
二次封装图片第三方框架——简单工厂模式的运用
平时在项目中,你们有没有遇到这样的情况,比如之前项目是使用开源框架ImageLoader,现在想使用Picasso或者Glide,这时候你会怎么办呢?是一行一行代码去改吗?当然可以,如果项目使用到ImageLoader相应的方法少的话,那还可以,但是一旦项目比较大型的话,这会是多大的工作量。原创 2017-01-15 20:36:20 · 2756 阅读 · 2 评论 -
AndroidStudio 引用 aidl 文件的两种方法
AndroidStudio 引入 aidl 文件,一般来说,有两种方法第一种方法直接在 src/main 目录下新建 aidl 文件夹,并将我们的 aidl 文件放到该目录下。因为 AndroidStudio 默认的 aidl 文件默认配置是这样的。第二种方法把 adil 文件拷贝到libs文件夹下在build.gradle文件中配置原创 2017-10-26 20:15:24 · 15482 阅读 · 0 评论 -
Android AIDL 传递对象(Parceable)
这篇博客主要介绍怎样使用 AIDL 中传递对象,实现进程间的通讯原创 2017-11-04 16:39:24 · 6941 阅读 · 0 评论 -
建造者模式(Builder)及其应用
建造者模式(Builder)及其应用其实建造者模式在我们平时写项目的时候我们经常看到,大部分人没仔细观察或者不熟悉建造者模式,才忽略了它,在我们常用的ImageLoader和Rxjava里面其实都运用了建造者模式本篇博客主要讲解一下几个问题 1. 什么是建造者模式 2. 建造者模式的应用场景及小Demo 3. 建造者模式在Android源码中的体现 4. 建造者模式在常见的开源框架中Imag原创 2016-08-04 23:35:42 · 8335 阅读 · 7 评论 -
Android Hook Activity 的几种姿势
这篇博客已 API 27 的源码为基础分析前言在上一篇文章中,我们介绍了 Hook 的要点Hook 的选择点:静态变量和单例,因为一旦创建对象,它们不容易变化,非常容易定位。Hook 过程:寻找 Hook 点,原则是静态变量或者单例对象,尽量 Hook public 的对象和方法。选择合适的代理方式,如果是接口可以用动态代理。偷梁换柱——用代理对象替换原始对象。And...原创 2018-08-06 19:35:28 · 12899 阅读 · 13 评论 -
Android 自定义 MarqueeView 实现跑马灯效果 - 使用说明
前言我们知道,Android TextView 默认支持跑马灯效果,但是不够灵活,比如不能支持设置动画执行时长,动画效果等。Github 上面也有一些优秀,实用的开源库。 作者 开源库 star 区别 实现原理 sunfusheng MarqueeView 2.5k + 支持对 View 进行复用,仅支持 TextView(内部最多有三个...原创 2018-09-04 19:41:48 · 21261 阅读 · 3 评论 -
Android 自定义 MarqueeView 实现跑马灯 —— 原理篇
前言在上一篇博客 Android 自定义 MarqueeView 实现跑马灯效果 - 使用说明 中,我们已经讲解了 MarqueeView 的各种用法。这篇博客,让我们一起来看一下 MarqueeView 的实现原理。在上一篇博客中,我们知道我们是通过给 MarqueeView setAdapter 来刷新界面的。因此,让我们一起先来看一下 MultiItemTypeAdapter。...原创 2018-09-05 19:31:15 · 5145 阅读 · 2 评论 -
Android 点九图机制讲解及在聊天气泡中的应用
点九图简介Android为了使用同一张图作为不同数量文字的背景,设计了一种可以指定区域拉伸的图片格式“.9.png”,这种图片格式就是点九图。注意:这种图片格式只能被使用于Android开发。在ios开发中,可以在代码中指定某个点进行拉伸,而在Android中不行,所以在Android中想要达到这个效果,只能使用点九图(下文会啪啪打脸,其实是可以的,只是很少人这样使用,兼容性不知道怎么样,点击...原创 2019-09-18 21:30:54 · 3858 阅读 · 1 评论 -
Android 面试必备 - http 与 https 协议
前言在讲解 http 与 https 之间的区别之前,我么先来看一下一个常见的面试问题。一次完整的 http 协议请求过程是怎样的该图片出自 博客Http协议的主要特点支持客户/服务器模式简单快速:客户向服务端请求服务时,只需传送请求方式和路径。灵活:允许传输任意类型的数据对象。由Content-Type加以标记。无连接:每次响应一个请求,响应完成以后就断开连接。无状态:服务...原创 2019-07-31 09:08:42 · 7201 阅读 · 3 评论 -
RecyclerView addItemDecoration 的妙用 - item 间距平均分布和添加分割线
前言RecyclerView,在开发当中使用非常频繁的一个控件,今天,主要讲解以下两个问题添加分割线item 间距的平均分布addItemDecoration 方法简介我们先来看一下 addItemDecoration 方法[官网链接](https://developer.android.com/reference/android/support/v7/widget/Recycl...原创 2019-04-18 20:37:09 · 28307 阅读 · 2 评论 -
关于RecyclerView的Adapter的notifyItemInserted()的一些分析
CSDN 博客地址本篇文章主要是针对RecyclerView的Adapter的notifyItemInserted()等方法进行分析,不涉及过多的源码分析,毕竟RecyclerView的代码有11037行,个人水平有限。我们知道RecyclerView的Adapter与ListView的Adapter相比较,主要有一下的几点不同1)在ListView的Adapter里面,holder这...原创 2016-06-17 11:12:17 · 41008 阅读 · 0 评论 -
自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页
使用CoordinatorLayout打造各种炫酷的效果自定义Behavior —— 仿知乎,FloatActionButton隐藏与展示NestedScrolling 机制深入解析 一步步带你读懂 CoordinatorLayout 源码自定义 Behavior -仿新浪微博发现页的实现ViewPager,ScrollView 嵌套ViewPager滑动冲突解决前言记得两年前的时候...原创 2019-03-10 20:15:47 · 10406 阅读 · 2 评论 -
Android 自定义最大宽度,高度, 宽高比例 Layout
前言这篇博客主要介绍的是怎样自定义一个可以指定最大宽度,高度,以及宽高比的 Layout。原理其实很简单,就是通过重写 onMeasure 方法,重新制定 MeasureSpec。使用说明常用的自定义属性 <attr name="ml_maxWidth" format="dimension" /> <attr name="ml_maxheight" form...原创 2019-02-28 20:53:22 · 5631 阅读 · 1 评论 -
EditText 集锦 - 开发中常用的用法及遇到的各种坑
前言EditText ,文本输入框,一个再熟悉不过的的控件,在开发当中,我们需要经常用到。这边文章,主要是记录 EditText 的常用用法,需要的时候可以直接复制张贴,提高效率。同时,本文章会持续更新,建议收藏起来。常用的基本属性该片段的内容来自于重拾Android之路之EditTextEditText属性(API 24)android:hint //设置hint提示文本andr...原创 2019-02-14 20:08:49 · 3638 阅读 · 0 评论 -
Android 仿微信, QQ 裁剪
前言在平时开发中,经常需要实现这样的功能,拍照 - 裁剪,相册 - 裁剪。当然,系统也有裁剪的功能,但是由于机型,系统兼容性等问题,在实际开发当中,我们通常会自己进行实现。今天,就让我们一起来看看怎样实现。这篇博客实现的功能主要有仿微信,QQ 上传图像裁剪功能,包括拍照,从相册选取。裁剪框的样式有圆形,正方形,九宫格。主要讲解的功能点使用说明整体的实现思路裁剪框的实现图片缩放的实现...原创 2019-04-26 20:21:18 · 5283 阅读 · 0 评论 -
java 源码系列 - 带你读懂 Reference 和 ReferenceQueue
从基础讲起Reference主要是负责内存的一个状态,当然它还和java虚拟机,垃圾回收器打交道。Reference类首先把内存分为4种状态Active,Pending,Enqueued,Inactive。 - Active,一般来说内存一开始被分配的状态都是 Active, - Pending 大概是指快要被放进队列的对象,也就是马上要回收的对象, - Enqueued 就是对...原创 2018-06-19 20:21:34 · 10266 阅读 · 3 评论 -
TextView AutoLink, ClikSpan 与长按事件冲突的解决
前言首先,我们先来复习一下 autoLink 和 ClickableSpan 是干什么用的。autoLink 当中有五个属性值:分别是 phone、email、map、web、all 和 none,前四个分别是自动识别电话号码、邮箱、地址和网址,而第五个是识别前四个的全部,none 是不识别;在不设置 none 而设置其他值的情况下,当你的 TextView 当中有 phone/map/w...原创 2018-12-24 22:21:52 · 4652 阅读 · 3 评论 -
聊一聊 Android 中巧妙的位操作
前言我们之前,在计算机当中,它是以二进制的形式来进行数的存储和加减乘除的。讲解之前,我们先来了解一下基本的位操作位操作含义具体含义&amp;amp;amp;表示与两位同时为 1,结果才为 1,否则为 0&amp;quot;| &amp;quot;表示或两位中只要有一个为 1,结果为 1^表示异或两位中数字不相同为 1,否则为 0~表示取法原创 2018-12-08 20:30:00 · 1100 阅读 · 0 评论 -
Android Fragment 的妙用 - 优雅地申请权限和处理 onActivityResult
前言Fragment,简称碎片,可以简单地认为它就是一个“控件”,更加具体一点就是“View控制器”。它自身有生命周期。在开发中,我们经常用到,再熟悉不过了。然而,Fragment 的一些巧妙引用,不知道你是否了解过?使用 Fragment 封装权限申请使用 Fragment 优雅处理 onActivityResultActivity reCreate 的时候用来存储数据这篇文章主要...原创 2019-01-15 20:23:15 · 7904 阅读 · 2 评论 -
Android mk 引用 jar 包、so 库、aar 包,系统签名
这篇博客主要介绍在 Android mk 引用 jar 包、so 库、aar 包,系统签名原创 2017-10-09 22:16:11 · 9073 阅读 · 1 评论