7 薛瑄

尚未进行身份认证

Android 工程师

等级
TA的排名 1k+

记录我修改JakeWharton的ButterKnife bug的实用经验

前言不得不说ButterKnife是一个很有学习价值的项目。我从学习源码,修改bug后,最后pullrequest,学到了很多东西。如果你对Butterknife源码还不了解,建议先看一下这篇文章。本文章不介绍基础的源码流程,主要是深入一部分代码,分享一些我在调试bug,修改bug的经验。与其拿着一个黑盒子看着表面,不停得猜测里面到底哪里出了问题,不如打开盒子看一下,看懂它的逻辑,比在外面...

2019-08-01 18:49:34

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

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

2019-07-17 10:00:25

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

前言首先我们先对调试器进行一些简单的了解,在去介绍调试注解处理器AnnotationProcessor就会清晰明了,懂了原理,操作基本就是一次学会调试器手动attach调试器平时在使用ASdebugAPP的时候,调试器会自动attach到app的进程。其实我们也可以手动把调试器attach到指定app的进程。1、点击run运行项目,非debug2、点击as中的attac...

2019-06-12 11:17:01

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

一、LiveData简介LiveData是google官方架构JetPack系列的一个响应式开发框架,LiveData是一个可以被观察的数据持有者类。说到响应式开发或者说观察者就不免想到RxJava,RxJava将观察者模式运用的炉火纯青。但LiveData和RxJava的定位是不一样的,LiveData主要用于搭建MVVM架构,并在其中作为数据持有者,LiveData能监听组件的生命周期变化,...

2019-06-04 16:41:05

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

一、Lifecycle介绍Lifecycle是一个生命周期感知组件,一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。二、使用方法先来看一下如何使用,这样再去分析源码就能有的放矢,1.添加依赖...

2019-06-03 15:50:36

TextView 在xml 中设置图片大小

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

2019-05-30 18:39:48

InputFilter 和inputType属性 ——Edittext(二)

简介Android开发中,输入框Edittext,经常会遇到控制输入类型,比如只输入数字,十进制,输入金额(两位小数)等等。EdittextinputType属性提供了一些规则,可以满足大部分的需求InputFilter可以自定义更复杂的输入规则一、inputType//输入类型为没有指定明确的类型的特殊内容类型android:inputType="n...

2019-05-25 17:40:47

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

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

2019-05-24 19:56:37

Fragment 源码浅析——Fragment(三)

与Fragment相关的类我们平时使用fragment的时候都是通过创建事务,来操作fragment,getSupportFragmentManager().beginTransaction().add(R.id.container,newMyFragment()).commit();查看源码可以发现getSuppo...

2019-05-24 17:43:55

类加载器与双亲委派模型

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

2019-04-18 12:01:00

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

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

2019-04-17 19:39:39

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

一、每个事务(FragmentTranscation)只能被commit一次介绍代码段一publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(save...

2019-03-10 22:07:57

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

一直想下载、编译、调试一下Android源码,加强对一些framework的理解,搞了好多次,终于可以正常调试了。这里进行一些总结和分享。Android源码到模拟器运行,主要有的四个步骤:下载源码搭建编译环境准备编译我使用的环境是Ubuntu16.04、openJDK8、Android8.0.0硬件软件要求官方文档:要求硬件要求:如果是Android2.3.x(...

2019-01-12 22:24:59

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

一、递归与尾递归递归:在函数的定义中使用函数自身的方法Kotlin代码实现一个n的累加的函数funrecursive(n:Int):Int{if(n==1){return1}else{returnn+recursive(n-1)}}尾递归:若函数在尾位置调用自身(或是一个尾调用本身的...

2018-12-28 21:59:30

Gradle深入理解指南

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

2018-12-22 22:32:16

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

Zuul服务网关服务网关=路由转发+过滤器1、路由转发:接收一切外界请求,转发到后端的微服务上去;2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。SpringCloudZuul包含了对Hystrix和Ribbon的依赖,下面将一一介绍ribbon参数配置提供客户端的负载均衡功...

2018-11-01 20:10:43

Maven 打包项目时出现的错误

打包时,没有install依赖项目使用maven管理的springboot项目,项目A依赖项目B,在打包项目A的时候,出现下面的错误报错:Failedtoexecutegoalonprojecthong-bao:Couldnotresolvedependenciesforprojectcom.xuexuan:hong-bao:jar:0.0.1-SNAPSH...

2018-10-31 22:56:36

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

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

2018-09-22 12:09:11

关于Mysql 的时区问题

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

2018-08-22 17:23:29

Lint found fatal errors while assembling a release target.

错误信息:调试的时候,都没有问题,但是在打包的时候,报出下面的错误Lintfoundfatalerrorswhileassemblingareleasetarget.Toproceed,eitherfixtheissuesidentifiedbylint,ormodifyyourbuildscriptasfollows:......

2018-08-17 16:22:07

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。