自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 RxJava retryWhen 异常业务处理总结

通过对rxjava retryWhen 的封装和使用,可以优化异常处理,在统一异常处理中有较为突出的效果

2023-09-19 17:28:03 262

原创 安卓 ImageView ScaleType

ImageView ScaleTypeImageView 的ScaleType 都是以ImageView的View的宽度,高度为基准,对原图片进行一定的调整。方式有8种。FIT_XYFIT_STARTFIT_CENTERFIT_ENDCENTERCENTER_CROPCENTER_INSIDEMATRIXFIT_XY原图片不按比例缩放,水平方向和ImageView 的宽度相同,垂直方向和ImageView 的高度相同,FIT_START以ImageView 为基准,对原始图片

2022-01-12 19:14:19 1347

原创 android Realm 优化

Realm数据库优化Realm数据的一个特点是支持跨平台操作,且效率上面比较高,是非关系数据库。但是在使用的过程中还是存在很多可以优化的控件,本文章重点解决Realm数据库无表信息和列信息,和Realm数据库统一升级的问题Realm 数据库的使用Android Studio中导入Realm依赖在Realm数据库的官方文档中介绍,在Android中引入数据库只要两步。官方文档地址 [Install Realm - Android SDK — MongoDB Realm](https://docs.mo

2021-09-06 18:59:36 497

原创 Android 内嵌滑动之子控件支持内嵌滑动

简介本篇文档作为滑动控件的延续,如果对滑动控件还有疑问的可以参考连接 https://blog.csdn.net/cxmfzu/article/details/114207345。在VIew的事件分发中,最为难处理的就是滑动事件冲突,使用传统的事件分发处理滑动冲突,可以参考书籍 《Android开发艺术探索》。本文主要分析出现内嵌滑动时,且控件作为子控件是如何处理,实现NestedScrollingxxxx相关接口。本文的相关demo参见 https://github.com/CodeKitBox/Con

2021-03-08 20:32:49 337

原创 Android 自定义滑动控件

简介

2021-03-03 10:24:59 1034

原创 Android ViewGroup 中 measureChild VS measureChildWithMargins

背景在定义ViewGroup 中一项重要的任务是重新onMeasure,onMeasure中的一项重要任务是测量子View的大小,子View的大小有可能影响ViewGroup 的大小。在测量子View 大小时,系统提供两个接口一个是 measureChild,一个是measureChildWithMargins。但是执行这个两个接口的时候发现有时候 measureChild和 measureChildWithMargins的结果是相同的,特此写下这篇文章用于记录 measureChild和 measure

2021-01-31 11:01:32 1349

原创 Android Q 存储体系适配(二)

简介关于应用常见的目录,参见Android Q 存储体系适配(一)。同时本人抛砖引玉,在github上面开源了一个库xStorage,用于适配Android Q 存储体系。在封装这个库的时候,最大的感想就是在Android Q 以后对文件的操作尽量使用Uri,可以极大的方便操作。xStorage 的github路径为:https://github.com/XCodeKitBox/XStorage.git。欢迎各位吐槽评论。背景介绍Android 官方为了让用户更好地控制自己的文件,并限制应用随意创建

2020-11-26 20:38:37 293

原创 Android Q 存储体系适配(一)

简介由于Android10 Android系统开始引入沙盒系统,且Android11 进一步的对沙盒系统进行了限制,以此为契机,梳理一下Android 的存储体系。内部存储和外部存储内部存储的位置是挂载在Android系统中的/data目录下面的存储空间。外部存储时挂载在Android系统中的/sdcard目录下面的存储空间。在Android4.4 以前,手机端的存储设备非常小,因此可以类比PC机,机身内部的存储设备就是内部存储。外置的SD卡就是外部存储。随着手机设备存储设备的越来越大,机身的存储设

2020-11-26 19:09:58 427 1

原创 Android WorkerManager 的使用

简介WorkerManager 适用于执行可以延迟(不需要精确时间)但是必须要稳定执行的的后台任务。适用于向后台同步应用数据,发送日志,应用检查更新等不需要及时完成的后台任务。在本文中这类型的后台任务,命名为延迟后台任务,方便理解。在Android8.0以后Android系对后台的服务有了严格的限制,因此执行后台任务,需要通过系统调度的方式来执行,Google官方推荐使用JobScheduler 作业替换后台 Service。但是WorkerManager 是JetPack中的一个组成部分,并且完成能够

2020-08-23 21:56:55 3667

原创 Java ScheduledExecutorService

ScheduledExecutorService 简介ScheduledExecutorService 的主要功能是将定时任务与线程池结合使用,网络上有很多博客对ScheduledExecutorService进行了分析,同时与Timer进行的比对。因此本篇不在对此进行描述,本篇主要描述使用ScheduledExecutorService的注意事项。ScheduledExecutorService 代码原型ScheduledExecutorService的构造函数源码是public Schedule

2020-08-21 20:33:51 575

原创 Android JobScheduler 的使用

JobScheduler的基本使用JobScheduler的使用分为:创建一个JobService的子类,用于执行后台任务。获取系统服务JobScheduler。构建JobInfo实例,指定自定义JobService的子类的执行条件。通过JobScheduler加入到任务队列,开始系统调度。简单代码如下:自定义JobService,执行后台任务public SimpleService extends JobService{ public boolean onStartJob(JobPa

2020-08-21 14:19:03 1891

原创 java 并发编程 - ExecutorService

背景为了能够方便的使用线程池,java提供的简单的实现方式。但是《阿里巴巴Java开发手册》中不建议使用。具体描述如下。单一工作线程线程池单一工作线程线程池,实现源码如下public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1,

2020-07-30 14:14:41 195

原创 深入理解线程池ThreadPoolExecutor - 问题整理

execute 和 submit 区别和联系很多博客都有提到线程池ThreadPoolExecutor 中提交任务的接口 execute和submit的区别。基本都是从返回值和异常的角度去看问题,但是我个人觉得没有讲到其本质区别,或者说讲的内容太浅,容易造成错误。首先submit类的接口源码位于ThreadPoolExecutor 的父类AbstractExecutorService中,源码如下: public <T> Future<T> submit(Callable&l

2020-07-28 14:41:48 470

原创 深入理解线程池 - ThreadPoolExecutor

线程是稀缺资源,创建线程,需要申请一定量的内存空间,具体申请多大主要取决于JVM虚拟机,由于对JVM不是很熟悉,后面有机会的时候了解一下,创建一个空线程,到底向虚拟机申请了多大的内存空间,如何通过命令查看,已经运行时如何查看。使用线程池的目的:线程是稀缺资源,不能频繁创建。解耦作用,将线程的创建和运行分开, 方便维护对线程进行复用。线程池肯定不是万能的,它适用于以下场景:线程之间是独立的,不依赖于其他线程的执行时序,执行结果。线程执行的任务在较短时间内可以完成线程的创建数量具有不确定性

2020-07-27 10:33:09 111

原创 Java并发编程笔记-自定义Runnable

RunnableRunnable 是一个接口,是线程的执行体。源码非常的简单。public interface Runnable{ public abstract void run();}为了应对复杂的场景,需要对Runnable进行简单的自定义,下面就描述两种场景,已经我对这两种场景的思考。场景1:获取线程(执行体)的执行结果。场景2:优雅的停止线程。获取线程(执行体)的执行结果注意本文中的执行体可能是Runnable 中的run方法或者Callable中的Call方法。线程的执行结

2020-07-23 21:13:59 749

原创 深入理解Java线程的创建

最近再次阅读了java并发编程的相关书籍和文档,以此为机会对自己学习到的知识做一个总结。创建线程很多博客说创建线程有两种方式一种是通过java.lang.Thread来实现,一种是实现接口java.lang.Runnable。对此有我不同的想法。我认为创建线程只有一种方式那就是通过java.lang.Thread来实现。接口java.lang.Thread只是编写了线程的执行体。最终创建线程还是需要通过Thread来实现。使用Runnable的例子实现Runnable接口 class M

2020-07-23 10:26:26 103

原创 android ListView 选择模式

单选模式

2020-07-13 21:51:39 765 1

原创 android 时间格式化工具

阿里编码规范检查在阿里编码规范检查中有一项检查是java8推荐使用检查条目描述如下:SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。 说明:如果是JDK8的应用,可以使用instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat,官方给出的解释:simple beautiful strong immutable

2020-06-30 20:13:04 1026

原创 Android 代码静态检测——阿里检查代码插件

代码静态检测android静态代码检查是一项保证代码开发质量,确保App稳定必不可少的流程。如何借助检测工具有效的检查出项目中代码层面存在的问题呢?阿里检查代码插件工具可以帮助你检查可能影响应用质量和性能的代码问题。该工具会报告检测到的每个问题并提供问题的描述信息和严重级别,以便你可以快速地确定需要优先进行哪些改进。阿里检查代码插件阿里检查代码插件如何安装和如何使用可以参考网上的博客,非常的简单。检查条目集合相关检查检查条目描述ArrayList的subList结果不可强转成Array

2020-06-26 10:12:39 1081

原创 SQLite 数据库迁徙

数据库迁徙当数据库表结构有变化时,为了保存当前数据库表存储的数据,就要进行数据库迁徙。数据库表结构变化分类如下。数据库表新增列。数据库表删除列。数据库表重命名列。数据库表修改列属性。数据库表修改索引。SQLite 数据库迁徙SQLite 数据库有关数据库表结构变化的文档参见官方文档SQLite 数据库表结构修改文档官方文档中的第5点,专门讲到数据库升级。对第5点进行简单翻译,以确定SQLite官方推荐的升级流程。数据库升级方案1SQLite直接支持的唯一更改模式的命令有:rena

2020-05-25 15:20:58 739

原创 Android 枚举 VS 枚举注解

枚举注解替换枚举java 虚拟机内存分配java 内存区域可分为方法区 存放虚拟机加载的类信息,常量,静态变量等数据。虚拟机栈 java 方法执行的内存模型:每个方法在执行的时候创建的栈帧,包括存储局部变量表,操作数栈,动态链接,方法出口等信息。本地方法栈 主要与Native相关堆 存放对象实例。程序计数器 当前线程执行的字节码行号指示器。java 数据类型占内存大小java 数据类型分为基本数据类型和引用数据类型。在32位系统上基本数据类型,本文中中的所有内存空间大小都在

2020-05-20 17:15:18 470

原创 android 控制 JNI 日志输出

简介在android 应用开发过程中,有时候会遇到需要使用JNI 技术调用C或者C++已经实现功能或者引入C 或者 C++ 编写好的库。因此需要使用到JNI技术。在使用过程有,会有这样的一个需求,需求描述如下:在调试过程中,在C 或者C++ 源码中,需要输出调试日志。在发布的版本中,C 或者 C++ 的调试日志,需要关闭。在android 打包过程中可以选择release 或者 debug,一般打包为 release包,java 代码通过Build.config可以对输出日志等调试信息进行控制

2020-05-19 16:12:45 1370

原创 RecyclerView item动画

RecyclerView item动画RecyclerView有一个方法 RecyclerView.setItemAnimator( ),这个方法就是添加item动画的,该方法需要一个RecyclerView.ItemAnimator对象。RecyclerView.ItemAnimator可以通过实现RecyclerView.ItemAnimator来实现recyclerView.setItemAnimator(new RecyclerView.ItemAnimator() {

2020-05-14 16:16:57 661

原创 Android Room VS GreenDao

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2020-05-06 20:44:23 5782 1

原创 ItemKeyedDataSource 使用注意事项

Paging简介Paging主要由三个部分组成:DataSource PageList PageListAdapter。DataSource<Key, Value>从字面意思理解是一个数据源,其中key对应加载数据的条件信息,Value对应加载数据的实体类。DataSource是一个抽象类,但是我们不能直接继承它实现它的子类。但是Paging库里提供了它的三个子类供我们继承用于不...

2020-04-22 10:28:11 1267

原创 Android Paging - PagedListAdapter

简介Android JectPack 组件中Paging 是其中一个重要组件。Paging 是对RecyclerVew.adpater的扩展。本文介绍其中一个知识点,用于记录自己的学习历程。AdapterRecyclerView是Android中的一个重要组件,使用RecyclerView组件最为重要的一个是自定义Adapter。如果使用Paging需要继承PagedListAdapter。...

2020-04-20 10:41:36 2406

原创 xCrash捕获Native异常(一)

Native异常android 开发过程中有时候需要使用JNI的方式调用C/C++的库。因此在调试的过程如果发现崩溃异常,如果能够获取C/C++ 的异常堆栈,则可以方便的确定哪一行代码出现了问题,方便快速的定位问题。在捕获Native异常中,原理上面基本是采用linux的信号机制。linux信号机制关于Unix-like系统的信号机制可以参见《深入Linux内核》第4章 中断和异常 ;第1...

2019-12-30 10:55:59 1996 1

原创 xCrash 捕获ANR异常

ANR异常android ANR 异常的英文全称是 “Application Not Responding”,中文意思即为应用无响应。在介绍xCrash捕获ANR异常时,先简单介绍一下ANR异常,以及产生ANR异常的原因,以及ANR常用的处理方式。ANR异常产生的类型KeyDispatchTimeout。UI主线程对于输入事件,即Inputdispatch事件超过5S没有处理产生ANR。...

2019-12-12 16:16:13 1816 1

原创 xCrash捕获Java异常

简介xCrash是爱奇艺开源的在android平台上面捕获异常的开源库。xCrash能为安卓 APP提供捕获Java崩溃异常,native崩溃异常和ANR异常。xCrash 能在 App 进程崩溃或 ANR 时,在你指定的目录中生成一个 tombstone 文件(格式与安卓系统的 tombstone 文件类似)。xCrash项目地址:github:https://github.com/iq...

2019-10-24 09:31:24 729

原创 xCrash使用篇

的地方

2019-10-20 17:20:42 9303

原创 WMRouter源码剖析

WMRouter源码解析JAVA SPISPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。SPISPI(Service Provider Interface),是java提供的一套用来被第三方实现或者扩展的API。它可以用来启用框架扩展和替换组件。Java SPI 实际上是“基于接口的编程...

2019-09-17 13:36:58 479

原创 WMRouter V1.2.0 源码简要分析

简介git路径:https://github.com/meituan/WMRouter.git官方文档介绍:https://tech.meituan.com/2018/08/23/meituan-waimai-android-open-source-routing-framework.html源码结构参考博客:https://www.jianshu.com/p/dd9a2ad6995d...

2019-07-31 11:06:49 342

原创 Android 组件化butterknife问题

问题描述在Android 开发过程中butterknife是非常有名的第三方依赖库,应用其依赖注入功能可以极大的提高开发效率,但是butterknife在module中有一些坑需要注意。在Android Studio 3.3 中使用butterknife 会出现编译产生不了R2.class情况。为解决这一情况,特此写下这篇文章小记一下。解决方案对于低于Android Studio 3.1...

2019-07-08 15:14:27 857

原创 EventBus3.0使用:线程模式

EventBus 线程模式前言EventBus有5种线程模式:ThreadMode: POSTINGThreadMode: MAINThreadMode: MAIN_ORDEREDThreadMode: BACKGROUNDThreadMode: ASYNC这几个模式在UI线程中订阅,在其他文章介绍比较多,因此本篇文章主要介绍,EventBus的订阅在子线程中订阅,可以有助于进...

2018-09-19 11:52:39 415

测试工具.rar

windows下弱网测试工具,用于模拟网络状况差的情况。本资源包含32位和64位资源。支持TCP,UDP协议等等。

2019-07-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除