自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

薛瑄的博客

不论是技术还是生活,你遇到的每个困难,都是一次提升自己的机会。努力解决好每个困难,你将成为更优秀的自己...

原创 Android 源码 分析

Android-UML-Diagram android 部分源码的流程图、时序图、类图,帮助更好的理解和记忆源码。 项目中包括,流程图、时序图、类图、辅助理解的图片以及UML图源文件(可导入画图工具)。并不是每个源码分析都包含这些,例如:函数的分析没有类图 说明:由于Android 源码很复...

2018-02-02 10:03:05

阅读数 537

评论数 0

原创 Android 微信 图片无法分享

最近在做微信分享的功能,图片分享,小程序分享,由于图片的原因,有的图片总是分享不出去。于是对这块进行了一些深入分析 分析过程 1、关于进程间通信 经过查看log日志,发现已经调用了微信的WXEntryActivity,并且我的App Activity 已经paused,但是没有跳到微信的分享界面,...

2020-03-31 18:53:06

阅读数 79

评论数 0

原创 Android 仿微信表情雨 、红包雨 支持资源回收再利用
原力计划

Github 项目:https://github.com/JantHsueh/EmojiRain 表情雨 ViewGroup 微信聊天中的表情雨效果一样。 相比于其他项目的优点: 本项目使用了资源缓存复用机制,在无限循环中,不会出现占用内存增长的问题,所以不会GC(除非),更流畅 提供了丰富的自...

2020-02-28 17:17:25

阅读数 239

评论数 0

原创 Github Actions 使用指南和Android 持续集成示例

前言 Github Actions 官方文档对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把我在自定义action的过程中遇到一些细节问题的解决方法。 Github Ac...

2020-01-11 15:05:13

阅读数 2937

评论数 0

原创 深入源码分析Handler 消息机制 、Looper、MessageQueue 消息同步屏障、IdleHandler、Message 复用

Handler 线程通信 基本使用 在Android 中Handler来实现,大多数都是用来实现,子线程中发送消息,到主线程中更新UI,下面是基本使用 // 步骤1:在主线程中 通过匿名内部类 创建Handler类对象 mHandler = new Handler(...

2020-01-06 19:02:03

阅读数 733

评论数 0

原创 parameter must be a descendant of this view 报错解决方案及Android 获取View焦点源码分析

前言 最近的一系列源码分析,都是基于一个错误,逐步深入源码。都是网上没有源码分析的报错,这个报错也是。 网络上有文章给出了有针对性的解决方案。我通过源码给出更普通的解决思路,这个问题,没有特定的解决方案,所以只能领会精髓后,随机应变。 下面分析是通过一个具体问题,展开源码的分析,所以不必太在意业务...

2020-01-04 15:42:13

阅读数 315

评论数 0

原创 Fragment has not been attached yet 解决方法及源码详解

前言 在使用Fragment的时候,在内存重启的后,很容易出现一些难以预期的bug,下面将继续一边分析源码,一边看看这个bug是怎么产生的。 这个报错的原因,可能和你的情况并不尽然相同。但是你可以通过对源码的理解,来加深对fragment的认识,从而能更优雅的解决问题。 报错 通俗的讲,就是在要使...

2019-12-30 16:42:12

阅读数 883

评论数 2

原创 Fragment.setNextAnim(int) on a null object 解决方法及源码详解

前言 相信遇到这个问题的小伙伴,一定很无奈,要想知道这个问题的原因,并根治这个问题,需要研究fragment系列的大部分源码。网上很多文章,只是简单描述了这个问题如何出现(使用的方法很麻烦,下面我回介绍一种更容易去重现这个问题的方法),我在这里从源码的角度,详细分析一下,这个问题出现的原因,知道了...

2019-12-28 10:35:05

阅读数 595

评论数 0

原创 调用removeViewInternal、removeView 屏幕还是显示被删除界面 的解决方法和源码分析

这是在使用Fragmentation时遇到一个问题,在这个库中很多人都遇到这个问题。追求极致体验的我,只好对源码进行修改了。源码的问题,我已经修改了,会在近期开源出来。 下面把这个问题的核心抽取出来,进行分析。 问题: 1、removeViewInternal 后,屏幕上还是显示那个被删除的布局界...

2019-12-19 18:07:16

阅读数 326

评论数 0

原创 Android 在动画结束回调onAnimationEnd()中remove view的崩溃解决方法及源码分析

问题: 问题描述起来很简单,就是在动画结束的时候,调用父view删除子view,出现崩溃,信息如下: java.lang.NullPointerException Attempt to read from field 'int android.view.View.mViewFlags&#...

2019-12-19 14:56:50

阅读数 671

评论数 1

原创 Android N 7.0 应用间共享文件(FileProvider)

Android N 之前的 Uri 常规Uri有两种: 媒体文件的Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。 其他的文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法生成。 Androi...

2019-12-09 10:15:25

阅读数 54902

评论数 4

原创 Android View 的scroll相关方法属性 以及Scroller弹性滑动原理

最近在修改fragmentation 的bug时,其中SwipeBackLayout 的实现使用是ViewDragHelper ,而ViewDragHelper 使用的是OverScroller,OverScroller 在大部分时候是可以取代Scroller的。所以先从Scroller来分析,这...

2019-12-06 17:57:16

阅读数 70

评论数 0

原创 安装完APP后,点击“打开”按钮,打开APP。回到桌面,点击桌面icon打开APP,出现多个app实例

问题 安装完APP后,点击“打开”按钮,打开APP。回到桌面,点击桌面icon打开APP,出现多个app实例 How to prevent multiple instances of an Activity when it is launched with different Intents ...

2019-11-04 20:25:27

阅读数 203

评论数 0

原创 记录我修改JakeWharton的ButterKnife bug的实战经验

前言 不得不说ButterKnife是一个很有学习价值的项目。我从学习源码,修改bug后,最后pull request,学到了很多东西。如果你对Butterknife 源码还不了解,建议先看一下这篇文章。本文章不介绍基础的源码流程,主要是深入一部分代码,分享一些我在调试bug,修改bug的经验。 ...

2019-08-01 18:49:34

阅读数 239

评论数 0

原创 Android字节码插桩——详细讲解 附带Demo

参考: Android字节码插桩采坑笔记 通过自定义 Gradle 插件修改编译后的 class 文件 ASM官方文档

2019-07-17 10:00:25

阅读数 751

评论数 0

原创 Java AnnotationProcessor 和 Kotlin Kapt 编译期调试代码——实践与原理

前言 首先我们先对调试器进行一些简单的了解,在去介绍 调试注解处理器AnnotationProcessor就会清晰明了,懂了原理,操作基本就是一次学会 调试器 手动attach调试器 平时在使用AS debug APP的时候,调试器会自动attach到app的进程。 其实我们也可以手动把调试器...

2019-06-12 11:17:01

阅读数 527

评论数 0

原创 LiveData 使用与源码分析——完全搞懂LiveData原理

一、LiveData简介 LiveData是google官方架构JetPack系列的一个响应式开发框架,LiveData是一个可以被观察的数据持有者类。说到响应式开发或者说观察者就不免想到RxJava,RxJava将观察者模式运用的炉火纯青。但LiveData和RxJava的定位是不一样的,Liv...

2019-06-04 16:41:05

阅读数 1687

评论数 1

原创 Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理

一、Lifecycle 介绍 Lifecycle是一个生命周期感知组件,一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。 这些组件可帮助您生成更易于组织且通常更轻量级的代码...

2019-06-03 15:50:36

阅读数 2014

评论数 3

原创 TextView 在xml 中设置图片大小

TextView xml中只能设置图片的位置,但是不能再xml中设置图片的大小 android:drawableStart="@drawable/pic" 在代码中可以啊对textview 的图片进行设置,主要代码如下: //设置图片的上下左右的位置,也就是宽高 drawa...

2019-05-30 18:39:48

阅读数 1213

评论数 0

原创 InputFilter 和inputType属性 ——Edittext(二)

简介 Android开发中,输入框Edittext,经常会遇到控制输入类型,比如只输入数字,十进制,输入金额(两位小数 )等等。 Edittext inputType属性提供了一些规则,可以满足大部分的需求 InputFilter 可以自定义更复杂的输入规则 一、 inputType ...

2019-05-25 17:40:47

阅读数 342

评论数 0

原创 Android7.0 网络安全配置、自定义okhttp证书 ——解决HTTPs 抓包问题

工具类 下面是工具类,只需要传入OkHttpClient.Builder对象,在使用中传入this 和自定义证书的路径(assets 资源下面的路径) /** * @Author: xuexuan: 2019年5月24日19:49:10 * @Description:设置okhttp 自定义证...

2019-05-24 19:56:37

阅读数 418

评论数 0

原创 Fragment 源码浅析——Fragment(三)

与 Fragment 相关的类 我们平时使用fragment的时候都是通过创建事务,来操作fragment, getSupportFragmentManager() .beginTransaction() .add(R.id.container, new M...

2019-05-24 17:43:55

阅读数 147

评论数 0

原创 类加载器与双亲委派模型

最近一直在面试,一直没空写这篇文章,等工作敲定后,再来补充吧

2019-04-18 12:01:00

阅读数 255

评论数 0

原创 DataBinding是如何实现数据变化视图更新的——源码分析

在使用databinding时,更新UI界面,如果是使用普通变量的,那么在变量发生变化的时候,UI界面并不会发生变化 一、数据绑定 视图跟随数据刷新 数据变化是视图也跟着变化则需要使用到以下两种方法 继承BaseObservable ObservableField,databinding默认实现...

2019-04-17 19:39:39

阅读数 502

评论数 0

原创 四种commit使用细节及源码分析——Fragment(二)

一、 每个事务(FragmentTranscation)只能被commit一次 介绍 代码段一 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(...

2019-03-10 22:07:57

阅读数 266

评论数 0

原创 Android 系统源码——下载到编译

一直想下载、编译、调试一下Android源码 ,加强对一些framework的理解,搞了好多次,终于可以正常调试了。这里进行一些总结和分享。 Android源码到模拟器运行,主要有的四个步骤: 下载源码 搭建编译环境 准备编译 我使用的环境是Ubuntu16.04 、openJD...

2019-01-12 22:24:59

阅读数 9378

评论数 3

原创 为什么递归与尾递归会栈溢出?优化原理是什么?

一、递归与尾递归 递归: 在函数的定义中使用函数自身的方法 Kotlin代码实现一个n的累加的函数 fun recursive(n:Int):Int { if (n == 1) { return 1 } else { retu...

2018-12-28 21:59:30

阅读数 2536

评论数 1

原创 Gradle深入理解指南

Gradle 比较通俗的讲,它是一个项目构建工具, 一个项目从代码 build.gradle文件 使用DSL 参考: Gradle教程 Gradle官方文档

2018-12-22 22:32:16

阅读数 448

评论数 0

原创 Zuul 超时、重试、并发参数设置

Zuul 服务网关 服务网关 = 路由转发 + 过滤器 1、路由转发:接收一切外界请求,转发到后端的微服务上去; 2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。 Spring Cloud Zu...

2018-11-01 20:10:43

阅读数 5401

评论数 1

原创 Maven 打包项目时出现的错误

打包时,没有install 依赖项目 使用maven管理的spring boot 项目,项目A 依赖项目B,在打包项目A的时候,出现下面的错误 报错: Failed to execute goal on project hong-bao: Could not resolve dependen...

2018-10-31 22:56:36

阅读数 4456

评论数 0

原创 Android Webview JS交互 自动点击遇到的问题

这篇文章主要是记录,在webview中实现自动点击按钮,和内容填充。遇到一些问题,希望能对你有所帮助 Webview 与 JS交互: Webview 与 JS交互,可以查看这篇文章Android:你要的WebView与 JS 交互方式 都在这里了 下面的JS代码实现的功能是:点击帐号登陆,输入账号...

2018-09-22 12:09:11

阅读数 1865

评论数 0

原创 关于Mysql 的时区问题

问题: 遇到这样一个问题,Mysql的时区,没有设置,默认是时区是0,在java代码中对应的字段类型是TimeStamp,mysql字段类型也是TimeStamp 项目A 代码中获取到的时间 是正确的。 写到数据库的时间也是对的。 从数据库读取出来时间是正确的 项目B 代码中获取的...

2018-08-22 17:23:29

阅读数 9205

评论数 1

原创 Lint found fatal errors while assembling a release target.

错误信息: 调试的时候,都没有问题,但是在打包的时候,报出下面的错误 Lint found fatal errors while assembling a release target. To proceed, either fix the issues identified by lin...

2018-08-17 16:22:07

阅读数 5177

评论数 5

转载 Accept-Encoding gzip 乱码 和Okhttp的解决方法

在使用okhttp请求服务器数据的时候,发现返回的数据一直都是乱码,但是使用fiddler抓包,decode后,可以正常显示。刚开始一直怀疑是编码的问题,后来对比了hex的数据和程序中乱码的二进制,发现不一样。fiddler可以自动处理,说明不是密钥加密。经过不断的尝试发现时Accept-Enco...

2018-08-14 10:11:42

阅读数 7108

评论数 0

原创 View 的 translationX、 translationY , X、Y 和 Left、Top,Right、Bottom

网上有不少人把view的坐标和点击事件的坐标 混为一谈 一、View的相关坐标和位置 先来看一张图,对这几个值有个大概了解,下面再进行详细的分析 先来了解一个概念: view动画不改变view的真实位置,就是肉眼看上去,view位置发生了变化,但是它的点击区域还是在原来的位置。 属性...

2018-08-02 14:47:45

阅读数 1789

评论数 1

原创 Android Transition 页面过度动画

前言 对于Activity的过度动画都很熟悉了,大多数都是直接使用下面的函数,指定退出的Activity和进入的Activity动画 overridePendingTransition(enterAnim, exitAnim); 这种动画很简单,旋转平移翻转等,这些操作,而且是这个界面的操作...

2018-07-30 18:18:11

阅读数 2744

评论数 0

转载 detached HEAD以及切换分支代码丢失

切换detached HEAD 分支代码丢失 首先要知道,所有提交过的代码,都是可以被找回的。 先来说说,从detached HEAD分支切换到其他分支,导致代码丢失的解决办法。每个人造成这种问题的原因,可能不尽相同,但是解决办法确实通用的 解决办法: 1、执行git reflog可以看到...

2018-07-26 17:35:21

阅读数 1311

评论数 0

原创 Your app(s) are using an unsafe implementation of the HostnameVerifier interface.

最近在把APP上架到Google Play的时候,被拒了,提示如下: HostnameVerifier Your app(s) are using an unsafe implementation of the HostnameVerifier interface. You can ...

2018-07-19 10:02:06

阅读数 1046

评论数 1

原创 Kotlin 错误解决大集合

解决Kotlin错误:Smart cast is impossible, because the property could have been changed by this time 未完待续

2018-06-30 22:42:39

阅读数 1044

评论数 0

原创 CentOS 7 防火墙

文章主要介绍防火墙的使用,和遇到的一些问题 CentOS 防火墙 命令 CentOS 6 系列使用 iptables Centos 7使用firewalld代替了原来的iptables。 查看防火墙的状态: Centos 7 firewall 命令: firewall-cm...

2018-05-14 18:12:24

阅读数 332

评论数 0

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