- 博客(72)
- 资源 (2)
- 收藏
- 关注
原创 Android消息机制(Handler、Looper、MessageQueue)
ThreadLocal 是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获取到数据。一般来说,当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,就可以考虑采用 ThreadLocal。
2023-11-16 15:49:13
768
原创 Android嵌套滑动机制
我们先来看一下动图,直观的感受下什么是嵌套滚动?嵌套就说明是。上图中,当我们滑动下面红色的UI控件时,先滑动的却是其父容器,当父容器滑动到一定程度后,下面红色的UI控件才开始滑动。那么嵌套滑动机制比ViewGroup的事件分发机制有什么优越之处呢?假设我们按照传统的事件分发去理解,首先我们滑动的是下面的红色的UI控件,而移动却是其父容器,所以按照传统的方式,肯定是父容器拦截了内部的红色的UI控件的事件。但是,,因为当父容拦截之后,是没有办法再把事件交给红色的UI控件的。
2023-11-07 10:14:02
325
原创 简析Window、WindowManager的工作流程
Activity并不负责视图控制,它只是控制生命周期和处理事件。真正控制视图的是Window。一个Activity包含了一个Window。
2023-04-08 07:21:13
206
原创 一篇文章搞懂Android事件分发机制
我们自定义View的触摸滑动事件会重写onTouchEvent,一般不会调用父类的onTouchEvent,即不能调用mOnClickListener.onClick处理点击事件。ScrollView就是这样,可以滑动,但是不能响应点击事件。如果想自定义View时既可以滑动也可以响应点击事件,可以在MotionEvent.ACTION_UP事件时调用performClick()。但是这样滑动结束时(手抬起)也会回调onClick(),因此需要区分是滑动还是点击再决定是否调用performClick()。
2022-11-16 10:13:15
319
原创 一篇文章帮你搞定ANR
ANR(Application Not responding),是指应用程序未响应,Android 系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成 ANR。一般地,这时往往会弹出一个提示框,告知用户「当前 xxx 未响应」,用户可选择继续等待或者 Force Close。
2021-12-29 09:50:17
154
原创 Jetpack原理系列-LiveData源码分析
一、订阅方法LiveData订阅方法有两个,分别是:observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super T> observer)和observeForever(@NonNull Observer<? super T> observer)。observe()方法的源码如下:public void observe(@NonNull LifecycleOwner owner, @NonNul
2021-12-18 15:35:44
1578
原创 Android Https解析
1、Http的缺点1)、通信报文是明文,内容容易被窃听2)、没有通信方的身份,通信方容易被伪装3)、无法验证报文的完整性,因此内容可能已经被更改2、Https可以解决上面缺点。Https就是Http+ssl。Http直接和tcp通信,Https是和ssl通信,ssl和tcp通信。ssl是独立于http的协议。结构如下:3、Https的加密机制1)、共享密码加密使用同一密码加密和解密的方式叫作共享密码加密,又叫对称米要加密。问题:共享密码加密方式怎么把密钥给客户端?
2021-09-22 15:34:08
447
原创 Android AIDL使用解析
AIDL 即 Android Interface Definition Language,翻译就是Android接口定义语言,用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。从某种意义上说AIDL其实是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而根据AIDL生成的一个IInterface的实例代码,AIDL其实是为了避免我们重复编写代码而出现的一个模板,AS根据AIDL生成我们需要的代码。设计AIDL这门语言的目的就是为了实现进程间通信。
2021-09-21 17:20:17
384
原创 Android Binder详解
Binder是Android中重要的进程间通信方式(IPC)。我们开发中使用的AIDL最终都是通过Binder实现。同时Android中提供很多系统服务(如AMS、PMS等),系统服务和我们的应用运行在不同的进程中,那么我们应用怎么使用系统提供的服务呢?其实简单点说这就是一个进程间通信,也是使用Binder实现。可见Binder在Android中是多么重要。
2021-09-09 09:54:13
87
原创 Retrofit 源码详细分析
Retrofit是一个RESTful的HTTP网络请求框架的封装。网络请求的工作本质上是 OkHttp 完成,而Retrofit仅负责网络请求接口的封装。App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数、Header、Url 等信息,之后由OkHttp完成后续的请求操作。在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofi根据用户的需求对结果进行解析。
2021-03-02 10:14:45
65
原创 SparseArray
采用二分查找查询数据。时间复杂度O(logn)。删除数据时没有马上触发删除索引后的数据向前复制,而是设置了一个标志。当插入时如果插入的位置刚好是设置标志的位置就可以直接插入了。不需要把索引后的数据向前移动,这样效率就更高了。SparseArray不需要像HashMap达到容量的0.75就需要扩容,可以等内存用完了再扩容。
2021-01-29 09:47:02
102
原创 AppBarLayout原理分析
CoordinatorLayout.Behavior接口中定义了嵌套滑动的相关方法具体如下。这些方法和NestedScrollingParent中定义的方法差不多。CoordinatorLayout的子控件可以指定Behavior,这样事件分发和嵌套滑动就会交给Behavior处理。这里是什么实现的呢?CoordinatorLayout实现了NestedScrollingParent,嵌套滑动相关方法以及事件分发相关方法都会遍历调用所有子控件的Behavior中定义的相关方法。
2020-10-30 11:46:17
804
原创 NestedScrollView嵌套RecyclerView导致RecyclerView复用失效的原因?
一、问题描述使用NestedScrollView嵌套RecyclerView导致RecyclerView复用失效,RecyclerView会将所有数据一次性全部加载。布局文件如下:<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" an
2020-10-27 11:55:28
6179
3
原创 Android多线程开发详解
一、volatile1、内存模型Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。变量的值何时从线程的工作内存写回主存,无法确定。2、volatilevolatile关键字的作用:保证了变量的可见性(visibility)。被volatile关键字修饰的变量,如果值发生了变更,其他线程立马可见,避免出现脏读的现象。volatile使用场景:一个线程写,多个线程读。
2020-08-06 21:59:41
2641
原创 Android 9.0适配指北
一、刘海屏适配1、layoutInDisplayCutoutMode属性Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT这是一种默认的属性,在不进行明确指定的情况下,系统会自动使用这种属性。这种属性允许应用程序的内容在竖屏模式...
2020-04-26 18:04:11
2164
原创 Android 8.0适配指南
一、为什么要适配从 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发; 2018 年 11 月 1 日起,所有 Google Play 的现有应用更新同样必须针对 Android 8.0。国内情况:为保障华为用户的使用体验,华为应用市场已在7月份启动Android P版本应用适配检测工作,针对未做适...
2020-04-23 17:05:37
706
原创 Android7.0应用内安装apk适配
一、为什么要适配从 2018 年 8 月 1 日起,所有向 Google Play 首次提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发; 2018 年 11 月 1 日起,所有 Google Play 的现有应用更新同样必须针对 Android 8.0。国内情况:为保障华为用户的使用体验,华为应用市场已在7月份启动Android P版本应用适配检测工作,针对未做适...
2020-04-22 19:32:50
1647
原创 彻底理解android中的内部存储与外部存储
我们先来考虑这样一个问题:打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的时候又是清除的哪里的数据?读完本文相信你会有答案。在android开发中我们常常听到这样几个概念,内存,内部存储,外部存储,很多人常常将这三个东西搞混,那么我们今天就先来详细说说这三个东西是怎么
2020-03-01 21:47:30
6021
3
原创 Android热修复技术-Tinker源码分析
一、使用Patch合成新的dex我们收到后台返回的补丁包后合成调用的是如下代码:TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed_7zip.apk");Envi...
2019-12-11 15:08:10
384
原创 Android热修复技术-Tinker
热修复的好处:在用户没有感知的情况下完成bug修复和一些小功能的更新。定义:动态的修复或者更新app的行为。tinker的接入详细见。
2019-12-05 17:24:35
487
1
原创 Android热修复技术-自己动手实现热修复
一、基本概念定义:动态的修复或者更新app的行为热修复的好处:在用户没有感知的情况下完成bug修复和一些小功能的更新流行的热修复技术:QQ空间的超级补丁方案微信的Tinker阿里的AndFix美团的Robust、ele的migo、百度的hotfix技术对比:...
2019-11-25 17:29:19
752
原创 Android热修复技术-基本知识
一、class文件1、什么是class文件能够被JVM识别,加载并执行的文件格式。除了Java,Scala、Python等也可以生产class文件。2、怎么生成class文件通过IDE自动帮我们build通过javac去生成3、class文件的作用记录一个类文件的所有信息,注意是所有信息。多于在java源代码中看到的信息(如java类中并没有this、super等关键字。那为什...
2019-11-22 15:50:57
285
原创 MVVM最佳实践
一、什么是MVVMMVP中随着业务逻辑的增加,UI的改变多的情况下,会有非常多的跟UI相关的情况,这样就会造成View的接口会很庞大。而MVVM就解决了这个问题,通过双向绑定的机制,实现数据和UI内容,只要想改其中一方,另一方都能够及时更新的一种设计理念,这样就省去了很多在View层中写很多case的情况,只需要改变数据就行。MVVM 由下面三层组成:View:主要进行视图控件的一...
2019-09-07 20:35:06
1180
原创 Android Architecture Components
一、简介Android Architecture Components 是谷歌在Google I/O 2017发布一套帮助开发者解决Android 架构设计的方案。使用Google 提供的处理数据持久化和管理组件生命周期的类,有助于应用开发者们构建更加鲁棒性,可测的,稳定可靠的应用。二、LifecycleLifecycle 组件指的是 android.arch.lifecycle 包下...
2019-08-26 16:18:03
263
原创 一篇文章学会MVP
一、MVCMVP是由MVC演变过来的,所以在学习MVP之前我们先看看MVC。MVC介绍部分转载自天码营-《Android App的设计架构:MVC,MVP,MVVM与架构经验谈》。地址为https://www.tianmaying.com/tutorial/AndroidMVC1、MVC简介MVC全名是Model View Controller,如图,是模型(model)-视图(v...
2019-05-08 15:44:08
180
原创 全面理解Gradle
一、简介Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。Gradle不单单是一个配置脚本,它的背后是三门语言。1)、Groovy LanguageGroovy 也是一门语言,Groovy是一门jvm语言,它最...
2019-03-27 11:18:19
368
原创 Groovy基础
1、声明变量的方法在Groovy中,通过 def 关键字来声明变量和方法。// 定义变量def a = 1;def int b = 1;def c = "hello world";def helloWorld(){ println("hello world"); return 0;}在Groovy中,很多东西都是可以省略的,比如1)、语句后面的分号是可以省略的...
2019-03-09 16:26:56
687
原创 Gradle常用高级自定义总结
一、在Gradle中指定签名文件1、首先自定义一个签名文件的配置代码如下:signingConfigs{ config{ storeFile file("D:\\wangheng\\project\\LiguoKeystore\\android.jks") storePassword "1qaz2wsx" keyAlias "s...
2018-12-24 15:52:37
953
原创 RxJava2.x 源码解析(二)线程切换
一、分析observeOn()方法的线程切换1、示例代码public static void changeThread() { Log.d("TAG", "当前程序所在的线程 " + Thread.currentThread().getName()); Observable<Integer> observable = Observable.create(new...
2018-12-15 15:14:23
201
1
原创 RxJava2.x 源码解析(一)订阅流程
一、示例代码public static void create() { Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(Observa...
2018-12-10 14:36:24
205
原创 Android DataBinding使用详解
在Google I/O 2015上,伴随着 Android M 预览版发布了DataBinding兼容函数库。DataBinding可以帮开发者节省大量无脑力代码,包括findViewById(),setText(),setOnClick()等。
2018-08-06 14:55:55
659
原创 OkHttp源码分析
一、整理思路整体流程如下:二、源码分析我们按照OkHttp的使用一步一步分析源码1、创建OkHttp对象OkHttpClient client = new OkHttpClient();OkHttpClient的构造函数如下:public OkHttpClient() { this(new Builder());}Builder的构造函数如下public Builde...
2018-08-03 10:16:08
579
原创 Android常用加密算法
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...
2018-03-21 17:24:55
440
原创 Android使用注解处理器实现ButterKnife
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...
2018-02-26 21:07:00
881
原创 Android注解详解
一、什么是注解?注解是一种元数据, 可以添加到java代码中。类、方法、变量、参数、包都可以被注解,注解对注解的代码没有直接影响。注解并没有什么魔法, 之所以产生作用, 是解析注解后做了相应的处理。注解仅仅只是个标记罢了。例如@Override就是注解,它的作用是:1、检查是否正确的重写了父类中的方法。2、标明代码,这是一个重写的方法。注解使用@interface定义,@Ove...
2018-02-08 10:44:35
649
原创 Retrofit使用详解
一、简介Retrofit是一个RESTful的HTTP网络请求框架的封装,RESTful介绍见博客《RESTful API 最佳实践》。网络请求的工作本质上是OkHttp 完成,Retrofit仅负责网络请求接口的封装。App应用程序通过 Retrofit 请求网络,实际上是使用Retrofit接口层封装请求参数、Header、Url 等信息,之后由OkHttp 完成后续的请求操作。在服务端返...
2017-10-10 17:57:27
687
原创 OkHttp使用详解
一、介绍OkHttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献。用于替代HttpUrlConnection和Apache HttpClient,HttpUrlConnection使用较复杂,android API23 里已移除HttpClient。OkHttp 处理了很多网络疑难杂症:会从很多常用的连接问题中自动...
2017-09-28 23:37:13
683
转载 利用tomcat服务器配置https双向认证、https单向认证-ssl、tls
关键字:利用tomcat服务器配置https双向认证、https单向认证-ssl、tls 首先推荐另一篇不错的文章:http://lixor.iteye.com/blog/1532655 很多朋友、同事问过一个问题,https/ssl怎么做,干什么用的等,今天写出来供大家参考,希望对大家有所帮助. 背景讲述: 1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源 2.
2017-09-03 21:26:46
671
转载 使用Fiddler抓取android应用http数据
1.首先先下载fiddler,这个直接百度就有啦。2.打开fiddler ,可以看到这个界面还是挺帅的:3.选择Tools - Fiddler Options -Https选项卡将配置设置为如下:4.将Connections 设置为如下:5.现在就是设置手机的时候了,老外教程 以下内容摘自此:我使用的是genymotion:Go to Android set
2017-09-02 21:07:52
1835
图解HTTP.pdf高清完整版 带目录
2018-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人