
Android
文章平均质量分 79
关于Android 的一切
薛瑄
公众号搜索“薛瑄”,技术答疑,中大厂内推,分享大佬的成长故事
展开
-
引用其他project的module,根据参数自动配置依赖,repo管理多个 Project
前言在开发中遇到这样一个问题,在工作的project(以下简称Project A)中,用到了Fragmentation(以下简称Project B) 库的三个module,这个库是我在维护,平时更改库中的一些bug,需要先使用一段时间,再推到github,并发布到jcenter, 所以在我的工作项目中,是直接使用本地的代码,没有使用jcenter去引用它。这就遇到一个问题,在Project A 中改完 Project B的三个module,在等到发布的时候,就需要手动把代码拷贝一份到Project原创 2020-06-23 14:46:01 · 1637 阅读 · 0 评论 -
Android 仿微信表情雨 、红包雨 支持资源回收再利用
Github 项目:https://github.com/JantHsueh/EmojiRain表情雨 ViewGroup微信聊天中的表情雨效果一样。相比于其他项目的优点:本项目使用了资源缓存复用机制,在无限循环中,不会出现占用内存增长的问题,所以不会GC(除非),更流畅提供了丰富的自定义函数,可设置任意自己想要的效果先来看下效果,太阳雨。(gif有点卡顿,因为录制屏幕时的帧率不够...原创 2020-02-28 17:17:25 · 1687 阅读 · 1 评论 -
Github Actions 使用指南和Android 持续集成示例
前言Github Actions 官方文档对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把我在自定义action的过程中遇到一些细节问题的解决方法。Github ActionsGithub Actions 提供了服务器(查看配置) ,来对代码进行打包发布等持续集成的...原创 2020-01-11 15:05:13 · 6999 阅读 · 0 评论 -
parameter must be a descendant of this view 报错解决方案及Android 获取View焦点源码分析
前言最近的一系列源码分析,都是基于一个错误,逐步深入源码。都是网上没有源码分析的报错,这个报错也是。网络上有文章给出了有针对性的解决方案。我通过源码给出更普通的解决思路,这个问题,没有特定的解决方案,所以只能领会精髓后,随机应变。下面分析是通过一个具体问题,展开源码的分析,所以不必太在意业务场景的相似,重在领会精髓报错我的具体场景是,在从某一个界面跳转到登录界面时,点击输入框EditTe...原创 2020-01-04 15:42:13 · 8572 阅读 · 0 评论 -
Fragment has not been attached yet 解决方法及源码详解
前言在使用Fragment的时候,在内存重启的后,很容易出现一些难以预期的bug,下面将继续一边分析源码,一边看看这个bug是怎么产生的。这个报错的原因,可能和你的情况并不尽然相同。但是你可以通过对源码的理解,来加深对fragment的认识,从而能更优雅的解决问题。报错通俗的讲,就是在要使用Fragment 的 mHost 变量的时候,这个 变量为空。导致下面的报错2019-12-30 ...原创 2019-12-30 16:42:12 · 20591 阅读 · 3 评论 -
Fragment.setNextAnim(int) on a null object 解决方法及源码详解
前言相信遇到这个问题的小伙伴,一定很无奈,要想知道这个问题的原因,并根治这个问题,需要研究fragment系列的大部分源码。网上很多文章,只是简单描述了这个问题如何出现(使用的方法很麻烦,下面我回介绍一种更容易去重现这个问题的方法),我在这里从源码的角度,详细分析一下,这个问题出现的原因,知道了原因你自然知道如何解决。当让我也会给出解决方法。我的问题发生场景,可能和你的不太一样,我尽量从更普通...原创 2019-12-28 10:35:05 · 3317 阅读 · 0 评论 -
调用removeViewInternal、removeView 屏幕还是显示被删除界面 的解决方法和源码分析
这是在使用Fragmentation时遇到一个问题,在这个库中很多人都遇到这个问题。追求极致体验的我,只好对源码进行修改了。源码的问题,我已经修改了,会在近期开源出来。下面把这个问题的核心抽取出来,进行分析。问题:1、removeViewInternal 后,屏幕上还是显示那个被删除的布局界面2、虽然屏幕上显示那个被删除的布局界面,但是可以点击事件可以传递到后面的布局上。3、使用Layo...原创 2019-12-19 18:07:16 · 2126 阅读 · 0 评论 -
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 · 8273 阅读 · 2 评论 -
Android N 7.0 应用间共享文件(FileProvider)
Android N 之前的 Uri常规Uri有两种:媒体文件的Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。其他的文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法生成。Android N 之前,这些uri可以传递到其他应用。Android N 中共享文件Android原创 2019-12-09 10:15:25 · 132100 阅读 · 6 评论 -
Android View 的scroll相关方法属性 以及Scroller弹性滑动原理
最近在修改fragmentation 的bug时,其中SwipeBackLayout 的实现使用是ViewDragHelper ,而ViewDragHelper 使用的是OverScroller,OverScroller 在大部分时候是可以取代Scroller的。所以先从Scroller来分析,这些知识用到好几次,经常忘记,也算做个笔记。Android开发中,但在这些api的实际使用过程中,开发...原创 2019-12-06 17:57:16 · 1363 阅读 · 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原因桌面启动app和安装器启动app的Intent不一样,安装完直接点击“打开”app,但是桌面点击...原创 2019-11-04 20:25:27 · 1960 阅读 · 0 评论 -
修改ButterKnife bug的实战经验
前言不得不说ButterKnife是一个很有学习价值的项目。我从学习源码,修改bug后,最后pull request,学到了很多东西。如果你对Butterknife 源码还不了解,建议先看一下这篇文章。本文章不介绍基础的源码流程,主要是深入一部分代码,分享一些我在调试bug,修改bug的经验。与其拿着一个黑盒子看着表面,不停得猜测里面到底哪里出了问题,不如打开盒子看一下,看懂它的逻辑,比在外面...原创 2019-08-01 18:49:34 · 1047 阅读 · 0 评论 -
自定义Gradle插件 字节码插桩 附带Demo
参考:Android字节码插桩采坑笔记通过自定义 Gradle 插件修改编译后的 class 文件ASM官方文档原创 2019-07-17 10:00:25 · 7301 阅读 · 0 评论 -
自定义Gradle plugin 、Java AnnotationProcessor 和 Kotlin Kapt 断点调试
前言首先我们先对调试器进行一些简单的了解,在去介绍 调试注解处理器AnnotationProcessor就会清晰明了,懂了原理,操作基本就是一次学会调试器手动attach调试器平时在使用AS debug APP的时候,调试器会自动attach到app的进程。其实我们也可以手动把调试器attach到指定app的进程。1、点击run 运行 项目,非debug2、点击as中的attac...原创 2019-06-12 11:17:01 · 3532 阅读 · 0 评论 -
Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理
一、Lifecycle 介绍Lifecycle是一个生命周期感知组件,一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。二、使用方法先来看一下如何使用,这样再去分析源码就能有的放矢,1.添加依赖...原创 2019-06-03 15:50:36 · 9917 阅读 · 4 评论 -
TextView 在xml 中设置图片大小
TextView xml中只能设置图片的位置,但是不能再xml中设置图片的大小 android:drawableStart="@drawable/pic"在代码中可以啊对textview 的图片进行设置,主要代码如下://设置图片的上下左右的位置,也就是宽高drawable.setBounds(left, top, right, bottom);//设置textView上下左右的图片...原创 2019-05-30 18:39:48 · 6678 阅读 · 0 评论 -
InputFilter 和inputType属性 ——Edittext(二)
简介Android开发中,输入框Edittext,经常会遇到控制输入类型,比如只输入数字,十进制,输入金额(两位小数 )等等。Edittext inputType属性提供了一些规则,可以满足大部分的需求InputFilter 可以自定义更复杂的输入规则一、 inputType //输入类型为没有指定明确的类型的特殊内容类型 android:inputType="n...原创 2019-05-25 17:40:47 · 1937 阅读 · 0 评论 -
Fragment 源码浅析——Fragment(三)
与 Fragment 相关的类我们平时使用fragment的时候都是通过创建事务,来操作fragment, getSupportFragmentManager() .beginTransaction() .add(R.id.container, new MyFragment()) .commit();查看源码可以发现getSuppo...原创 2019-05-24 17:43:55 · 1018 阅读 · 0 评论 -
四种commit使用细节及源码分析——Fragment(二)
一、 每个事务(FragmentTranscation)只能被commit一次介绍代码段一public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save...原创 2019-03-10 22:07:57 · 1910 阅读 · 0 评论 -
Android 系统源码——下载到编译
一直想下载、编译、调试一下Android源码 ,加强对一些framework的理解,搞了好多次,终于可以正常调试了。这里进行一些总结和分享。Android源码到模拟器运行,主要有的四个步骤:下载源码搭建编译环境准备编译我使用的环境是Ubuntu16.04 、openJDK8、Android 8.0.0硬件软件要求官方文档:要求硬件要求:如果是 Android 2.3.x (...原创 2019-01-12 22:24:59 · 47629 阅读 · 21 评论 -
Android Webview JS交互 自动点击遇到的问题
这篇文章主要是记录,在webview中实现自动点击按钮,和内容填充。遇到一些问题,希望能对你有所帮助Webview 与 JS交互:Webview 与 JS交互,可以查看这篇文章Android:你要的WebView与 JS 交互方式 都在这里了下面的JS代码实现的功能是:点击帐号登陆,输入账号密码,登陆String js = "javascript:{document.getElementB...原创 2018-09-22 12:09:11 · 3869 阅读 · 0 评论 -
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 lint, or modify your build script as follows: ... ...原创 2018-08-17 16:22:07 · 15079 阅读 · 9 评论 -
View 的 translationX、 translationY , X、Y 和 Left、Top,Right、Bottom
网上有不少人把view的坐标和点击事件的坐标 混为一谈一、View的相关坐标和位置先来看一张图,对这几个值有个大概了解,下面再进行详细的分析先来了解一个概念:view动画不改变view的真实位置,就是肉眼看上去,view位置发生了变化,但是它的点击区域还是在原来的位置。属性动画和setTranslationX/setTranslationY ,会改变显示位置和真实位置上...原创 2018-08-02 14:47:45 · 9867 阅读 · 3 评论 -
Android Transition 页面过度动画
前言对于Activity的过度动画都很熟悉了,大多数都是直接使用下面的函数,指定退出的Activity和进入的Activity动画overridePendingTransition(enterAnim, exitAnim);这种动画很简单,旋转平移翻转等,这些操作,而且是这个界面的操作。下面介绍一种更加美观的Activity过度动画Android在新的sdk中给我们提供了另外一种A...原创 2018-07-30 18:18:11 · 7499 阅读 · 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 find more information about how resolve the issue i...原创 2018-07-19 10:02:06 · 3538 阅读 · 1 评论 -
Android 源码 分析
Android-UML-Diagramandroid 部分源码的流程图、时序图、类图,帮助更好的理解和记忆源码。项目中包括,流程图、时序图、类图、辅助理解的图片以及UML图源文件(可导入画图工具)。并不是每个源码分析都包含这些,例如:函数的分析没有类图说明:由于Android 源码很复杂,这些图表都是描述了一个大概的过程,为了快速理解源码,很多不是很重要的代码,在图表中省略了。也就是说原创 2018-02-02 10:03:05 · 1074 阅读 · 0 评论 -
Android按返回键退出程序但不销毁
最近在调试程序,发现每次按返回键,一直退出到桌面。再次打开都要重新从启动界面进入,但是微信QQ并不是这样的。调试了一下微信的,发现返回到桌面的时候,微信的界面还是处于stop状态,并没有销毁。后来找了好久,找到了解决方法,主要是两个函数的使用:boolean isTaskRoot()用来判断该Activity是否为任务栈中的根Activityboolean moveTaskToBa原创 2018-02-01 20:19:56 · 2556 阅读 · 0 评论 -
android.intent.action.MAIN和singleTask模式 的奇怪问题
最近在研究activity被系统回收后,如何重新启动app,看到了一篇文章,突然想起是之前遇到的一个问题,没有整理,今天记录一下,具体原因我没有搞明白,希望大神们指点指点。activity android:name=".IndexActivity" android:launchMode="singleTask"> inte原创 2018-01-29 20:28:27 · 1446 阅读 · 0 评论 -
APP在后台被系统回收后,如何重新启动
问题:app运行在后台,android系统会在内存不够用的时候,回收app,如果app中有全局的变量,那么再次打开app可能会出现崩溃的情况。示例:示例源码public class MyApplication extends Application { String name; String getName() { return name;原创 2018-01-29 17:19:42 · 7759 阅读 · 0 评论 -
Android 保存Fragment 引用及 getActivity() 为空问题
问题分析:在使用Fragment的时候经常会遇到getActivity()为null的情况。比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题。之前解决这个问题,通常都是直接加空指针判断来规避,但是这并没有真正解决问题。很多人都曾被这个问题所困扰,如果app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象。如果系统转载 2018-01-18 09:15:46 · 950 阅读 · 0 评论 -
Android 调用相机APP获取拍照图片和从相册选择图片
源码部分分析Camera.java → 点我定位,注意研究1134行与2023行的两个方法。通过源码可以发现,输出的图片有2个分支如果你没有指定Intent里面的Extra参数,它就返回一个序列化(putExtra(“data”, bitmap))的Bitmap,从理论上来说,这样的代码写的很烂,属于Magic Number。如果你指定了Intent里面的Extra参数MediaS原创 2018-01-09 10:13:07 · 15164 阅读 · 1 评论 -
This Toast was not created with Toast.makeText()
这个错误遇到两次了,这里记录一下错误:java.lang.RuntimeException: This Toast was not created with Toast.makeText()分析这个错误,是我在使用封装好的Toast工具类时出现的,工具类代码大概如下:public class ToastUtils { private static Toas原创 2018-01-05 10:36:43 · 3758 阅读 · 0 评论 -
Android 自定义View 中attr属性 深入解析
一、attr和styleable自定义View,如果想在xml指定参数(例如:改变字体颜色,字体大小),需要声明一个styleable,并在里面自己定义一些attr属性。attr不依赖于styleable,styleable只是为了方便attr的使用。不使用styleable自定义属性完全可以不放到styleable里面,比如直接在resources文件中定义一些属性:<attr name="cus原创 2017-11-27 16:06:26 · 5096 阅读 · 1 评论 -
Android 状态栏样式 全面解析
网上已经有很多关于状态栏样式的文章,要么讲的不全,要么讲的不对,有的文章说的头头是道,但是代码是错的。所以在这里总结一下下面以系统版本作为分界,来详细介绍状态栏的样式一、效果图4.4版本之前状态栏是黑色的,无法改变图一: 4.4及以上,5.0以下下面的全透明和渐变透明,代码实现是一样的,因为部分定制的ROM,修改成了全透明渐变透明:图二: 全透明图三: 酷派系统,MIUI,显示的是全透明的。原创 2017-11-21 16:08:46 · 1859 阅读 · 0 评论 -
byte[],Bitmap,YuvImage,Drawable 旋转、缩放、相互转化
1、byte[](YuvImage )->Bitmap在相机开发中,Camera获取到摄像头每一帧的图像数据byte[],有时候需要把它转为Bitmap @Override public void onPreviewFrame(final byte[] data, Camera camera) { camera.setPreviewCallback(null);转载 2017-11-14 20:02:13 · 5791 阅读 · 1 评论 -
使用Glide加载网络图片,显示到高德地图的marker
使用Glide加载网络图片,显示到高德地图的marker,会遇到一些问题,下面将逐一讲解每个问题的解决方法一、marker显示网络图片问题问题:使用Glide加载网络图片,显示到高德地图的marker上,会出现,有时候显示占位符,有时候显示正常的网络图片。网络图片是可以随时正常访问的。分析:1、marker 显示的是一个自定义的view A 2、显示maker的时候,Glide加载网络图片,显示到原创 2017-11-04 18:50:37 · 4642 阅读 · 7 评论 -
Android 蓝牙开发
蓝牙版本介绍蓝牙版本现在最新是蓝牙 5。在蓝牙4.0 提出了“低功耗蓝牙”、“经典蓝牙”和“高速蓝牙”三种。低功耗蓝牙和经典蓝牙现在的蓝牙实际上分为了三类:单模、双模和经典。那么,最官方的蓝牙版本称呼就是,单模蓝牙、双模蓝牙和经典蓝牙。单模,也就是低功耗蓝牙,平常看到Bluetooth Smart、BLE就是指这个。 经典,就是经典蓝牙。 双模就是兼容低功耗蓝牙和经典蓝牙。平时看到的Blueto原创 2017-10-21 17:06:02 · 1656 阅读 · 0 评论 -
查看apk 的方法数量
以前找到的两个网站,由于不常用,放在收藏夹里,偶尔用的时候经常找不到,记录分享一下。直接把apk导入,就可以查看apk的放法数 http://inloop.github.io/apk-method-count/ http://www.methodscount.com/原创 2017-06-07 15:47:15 · 1983 阅读 · 0 评论 -
你必须知道的APT、annotationProcessor、android-apt、Provided、自定义注解
你可能经常在build.gradle文件中看到,这样的字眼,annotationProcessor、android-apt、Provided,它们到底有什么作用?下面就一起来看看吧1、什么是APT?随着一些如ButterKnife,dagger等的开源注解框架的流行,APT的概念也越来越被熟知。annotationProcessor和android-apt的功能是一样的,它们是替代...原创 2017-04-01 15:51:59 · 48565 阅读 · 8 评论 -
Android冷启动实现APP秒开
在阅读这篇文章之前,首先要知道,App 启动分为冷启动和热启动。点击一个App 图标的时候会发现有时进入App首页很快,有时很慢,有时中间还有个白屏。有时中间还有个黑屏。冷启动冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用。冷启动的特点:因为系统会重新创建一个新的进程分配给它,所以会创建和初始化Application,在创建和初始化它的Launch Activ转载 2017-03-24 15:24:56 · 6340 阅读 · 2 评论