8 薛瑄

尚未进行身份认证

Android 工程师

等级
TA的排名 796

RxJava之七——RxJava 2.0 图文分析create()、 subscribe()、map()、observeOn()、subscribeOn()源码

Rxjava的使用流程,相信大家都很清楚了,就是以下面这个简单的demo,重点分析一下map()、observeOn()、subscribeOn()源码 Observable.create(object : ObservableOnSubscribe<Int> { override fun subscribe(emitter: ObservableEmitter<Int>) { }}) .map

2020-05-19 16:51:39

Android 微信 图片无法分享

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

2020-03-31 18:53:06

Android 仿微信表情雨 、红包雨 支持资源回收再利用

Github 项目:https://github.com/JantHsueh/EmojiRain表情雨 ViewGroup微信聊天中的表情雨效果一样。相比于其他项目的优点:本项目使用了资源缓存复用机制,在无限循环中,不会出现占用内存增长的问题,所以不会GC(除非),更流畅提供了丰富的自定义函数,可设置任意自己想要的效果先来看下效果,太阳雨。(gif有点卡顿,因为录制屏幕时的帧率不够...

2020-02-28 17:17:25

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

前言Github Actions 官方文档对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把我在自定义action的过程中遇到一些细节问题的解决方法。Github ActionsGithub Actions 提供了服务器(查看配置) ,来对代码进行打包发布等持续集成的...

2020-01-11 15:05:13

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

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

2020-01-06 19:02:03

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

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

2020-01-04 15:42:13

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

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

2019-12-30 16:42:12

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

前言相信遇到这个问题的小伙伴,一定很无奈,要想知道这个问题的原因,并根治这个问题,需要研究fragment系列的大部分源码。网上很多文章,只是简单描述了这个问题如何出现(使用的方法很麻烦,下面我回介绍一种更容易去重现这个问题的方法),我在这里从源码的角度,详细分析一下,这个问题出现的原因,知道了原因你自然知道如何解决。当让我也会给出解决方法。我的问题发生场景,可能和你的不太一样,我尽量从更普通...

2019-12-28 10:35:05

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

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

2019-12-19 18:07:16

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

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

2019-12-19 14:56:50

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

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

2017-10-20 20:07:03

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

最近在修改fragmentation 的bug时,其中SwipeBackLayout 的实现使用是ViewDragHelper ,而ViewDragHelper 使用的是OverScroller,OverScroller 在大部分时候是可以取代Scroller的。所以先从Scroller来分析,这些知识用到好几次,经常忘记,也算做个笔记。Android开发中,但在这些api的实际使用过程中,开发...

2019-12-06 17:57:16

安装完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原因桌面启动app和安装器启动app的Intent不一样,安装完直接点击“打开”app,但是桌面点击...

2019-11-04 15:18:13

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

前言不得不说ButterKnife是一个很有学习价值的项目。我从学习源码,修改bug后,最后pull request,学到了很多东西。如果你对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调试器平时在使用AS debug APP的时候,调试器会自动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 中设置图片大小

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

2019-05-30 18:39:48

InputFilter 和inputType属性 ——Edittext(二)

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

2019-05-25 17:40:47

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。