12 一叶飘舟

尚未进行身份认证

我要认证

技术真好!

等级
TA的排名 29

Android URL中参数的获取、拼接及修改

1、获取参数Uri uri = Uri.parse(url);String type = uri.getQueryParameter("key");2、拼接Uri.Builder builder = Uri.parse(url).buildUpon();builder.appendQueryParameter("key", value);3、修改public static String replace(String url, String key, String value)

2020-08-10 14:22:30

ThreadLocal会不会内存泄漏?

1. 前言有关 ThreadLocal 源码分析的文章不少,其中有个问题常被提及:ThreadLocal 是否存在内存泄漏?不少文章对此讲述比较模糊,经常让人看完脑子还是一头雾水,我也有此困惑。因此找时间跟小伙伴讨论了一番,总算对这个问题有了一定的理解,这里记录和分享一下,希望对有同样困惑的朋友们有所帮助。当然,若有理解不当的地方也欢迎指正。2. 应用场景ThreadLocal 的应用场景不少,这里举个简单的栗子:单点登录拦截。也就是在处理一个 HTTP 请求之前,判断用户是否登录:

2020-07-19 19:29:11

Android布局中同级View的事件传递优先级

说起Android中View的事件分发机制,不少开发者脑海中应该会立刻浮现出一幅流程图。已经有许多文章详细的分析了点击事件在上下级View和ViewGroup之间的传递规则。但同级View之间的点击事件是如何专递的呢?换句话说,处于同一个ViewGroup内的两个View重合时,ViewGroup是如何决定传递到哪一个View的?部分有经验的开发者可能会说:按照xml中的排列顺序,最后的优先触发。的确,在相当长的时间里我也是这么认为的。但在最近的开发中我遇到了一个比较棘手的问题,这也促使我从源码中去进行更深

2020-07-19 00:19:44

Android RecyclerView item选中放大被遮挡问题

在Android TV上一般选中某个View, 都会有焦点突出放大的效果, 但是当在RecyclerView中(ListView或GridView)实现当item View执行放大动画后会被其他的item View遮挡.原因是: RecyclerView的机制是越靠后的View z-order越高, 所以bringToFront方法是不管用的.在实现针对TV端的自定义控件 TvRecyclerView 时遇到此问题, 最后的解决方案是:自定义RecyclerView, 重写getChildDra..

2020-07-17 00:08:58

View.post() 原理深入理解

关于View.post() 相信每个Android开发人员都不会感到陌生,它最常见的场景主要有两种。 更新 UI 操作 获取 View 的实际宽高 view.post() 的内部也是调用了 Handler,这可能是绝大多数开发人员所了解的,从本质来说这样理解并没有错,不过它并能解释上面提出的第 2 个场景。在 Activity 中,View 绘制流程的开始时机是在 ActivityThread 的 handleResumeActivity 方法,在该方法首先完成 Activit...

2020-07-16 23:33:29

Android RecyclerView Item使用动画被遮挡,ClipChildren也无效的坑

clipChildren这个属性需要设置在该View的祖父布局上,也就是父布局的父布局。也就是说如果一个View想要超出父布局,需要在其祖父布局上设置android:clipChildren="false"(而不是父布局)如图布局文件如下<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" andro...

2020-07-16 11:33:19

Android控制View绘制顺序的关键方法——setChildrenDrawingOrderEnabled

今天我们来聊聊 View 绘制流程的一个小细节,自定义绘制顺序。View 的三大流程:测量、布局、绘制,我想大家应该都烂熟于心。而在绘制阶段,ViewGroup 不光要绘制自身,还需循环绘制其一众子 View,这个绘制策略默认为顺序绘制,即 [0 ~ childCount)。这个默认的策略,有办法调整吗?例如修改成 (childCount ~ 0],或是修成某个 View 最后绘制。同时又有什么场景需要我们做这样的修改?需要注意的是,绘制顺序会影响覆盖顺序,同时也会影响 View 的事件分发,这

2020-07-16 09:13:10

HashSet中add()方法的使用

HashSet 传入对象,怎么过滤首先,我们知道所有的Set里面都套了一个Map,使用Map的Key存值,Value存放一个固定的Object,这是适配器模式。源码如下:public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long serialVersionUID =

2020-06-19 12:33:21

Android 原生webview传递header前端H5如何接收

开发背景跟其他公司合作的一个项目,传递参数的方式为原生通过自定义header头参数,由前端来接收。踩坑1 原生传参安卓原生传参的方式很简单,通过webview.loadUrl这个方法,如下: Map<String, String> map = new HashMap<String, String>(); map.put("Payment-Token", "*****"); myWebView.loadUrl(myEdit.getText().toStr.

2020-06-17 18:05:14

小米净水器更换滤芯步骤和水龙头亮黄灯的解决办法

【开篇序言】众所周知,无论何种品牌的净水器,滤芯都是有一定使用寿命的,而不是一次性安装可永久使用,如果遇到无需换滤芯这类宣布,请远离,不靠谱。换滤芯,小米净水器也不例外,小米净水器从外到内,分别为PP棉滤芯(对自来水进行一级过滤,过滤掉如泥沙、铁锈、纤维等粒径较大的颗粒物)、前置活性碳滤芯(对自来水二级处理,吸附水中异色、异味等物质)、RO反渗透滤芯(对自来水三级处理,过滤掉水中重金属、细菌、水垢等细微物体,理论上过滤精度可达0.0001微米)、后置活性碳滤芯(对反渗透滤芯产生的水深度净化、吸附异味,改

2020-06-06 18:57:07

Android 巧用 flexboxLayout 布局

FlexBoxlayout是Google推出的开源的可伸缩性布局,在项目中也会经场使用,大大提高了用户的体验。compile 'com.google.android:flexbox:1.0.0'有前端基础的同学估计都知道 CSS 中这个布局,用来为盒状模型提供最大的灵活性。因为 android 中这个库属性和 CSS 中 都一样,并且阮一峰老师写的前端知识真的很通俗易懂,所以这里的介绍大多来自Flex 布局教程。采用 Flex 布局的元素,称为 Flex 容器(flex containe.

2020-06-01 17:53:15

Gson 解析 Json,容错才是关键,举几个常用的实例!

在上篇文章中,提到了GSON 在 JSON 序列化和反序列化之间,数据容错的情况,最简单的利用@SerializedName注解来配置多个不同 JSON Key 值,或者再使用@Expose来配置一些例外的情况。更复杂一些的数据,可以使用 TypeAdapter 来解决,TypeAdapter 可以说是一颗 GSON 解析 JSON 的银弹,所有复杂数据解析以及容错问题,都可以通过它来解决。GSON 数据容错实例就像前文中介绍的一样,GSON 已经提供了一些简单的注解,去做数据的容错处...

2020-05-28 18:30:36

Gson在使用时怎么对JSON容错处理

序“JSON是一种具有自描述的、独立于语言的、轻量级文本数据交换格式,经常被用于数据的存储和传输。而GSON可以帮我们快速的将JSON数据,在对象之间序列化和反序列化。”GSON 的toJson()和fromJson()这两个方法,是GSON最基本的使用方式,它很直观,也没什么好说的。但当被问及GSON如何对JSON数据容错,如何灵活序列化和反序列化的时候,就有点抓瞎了。JSON数据容错,最简单的方式是让前后端数据保持一致,就根本不存在容错的问题,但是现实场景中,...

2020-05-28 17:02:42

Integer.valueof()和Integer.parseInt()的区别

Integer. valueOf()可以将基本类型int转换为包装类型Integer,或者将String转换成Integer,String如果为Null或“”都会报错。Integer. valueOf()是高效的public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache

2020-05-26 11:43:01

Kotlin ==和===的区别

总体来说kotlin中==比较的是数值是否相等, 而===比较的是两个对象的地址是否相等, 见如下代码:val a: Int = 999val b: Int? = aval c: Int? = aprintln(b == c) //trueprintln(b === c) //false这个和java中运行结果是在意料之中, == 比较数值, 而===比较的是地址, 前者为true, 后者为false.那么看下面这段代码的运行情况: val a: Int = 9...

2020-05-26 10:56:17

Android Activity中获取View的宽高

我们在开发中经常会遇到在界面中比如 activity 使用到控件的 width 或者 height,大家也都知道在 onCreate() 中去 getWidth() 或者是 getMeasuredWidth() 拿到的结果都是 0,这是因为我们的 activity 的创建和 view 绘制不是同步的,下面我总结了一些方法来获取 view 的宽度和高度的方法: - View.Post(new Runnable()) 方法 这个方法并不是新启动一个线程,SDK 中对这个方法的注释为Causes the.

2020-05-10 16:02:42

View.getContext() 里的小秘密

一、引言关于这篇文章内容适合哪些同学,可以先提几个问题请大家考虑下。1、如果通过一个 ImageView 类型的view.getContext()来获取到的 context 是什么类型?2、Activity 中调用setContentView()与addContentView()方法有什么区别?3、AppCompatActivity 相对于 Activity 的set...

2020-04-27 23:25:49

Android中如何通过View获取Activity

在开发过程中,我们会遇到下面情况:Button button = (Button) findViewById(R.id.btn);button.setOnClickListener(MainActivity.this); if(button instanceof AppCompatButton){ Log.d("HHHHH","====button is appCompatButt...

2020-04-27 23:22:32

kotlin 中::class 、class.java、javaClass、javaClass.kotlin区别

Kotlin的类class Person { var name: String = "" var age: Int = 0 companion object { }}java类public class Man {}要知道获取的到底是什么,可以利用andorid stuido的类型提示,一目了然。...

2020-04-05 15:37:55

Activity 的 isFinishing()、isDestroy()

结论:isFinishing() 用于判断 Activity 是否正在 finish。isDestroy() 用于判断 Activity 是否已经 destroy。isFinishing() 返回 true 后 isDestroy() 才会返回 true。一、isFinishing() /** * Check to see whether this activity ...

2020-03-09 23:40:02

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 博客之星
    博客之星
    授予通过"CSDN博客之星评选"中脱颖而出的十大博客之星称号的用户。
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享王者
    分享王者
    成功上传51个资源即可获取