自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 Kotlin Flow无缝衔接Retrofit——FlowCallAdapter

* 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布:https://mp.weixin.qq.com/s/BCmvMHfX8zGnUL5Om_Ez9w

2020-04-24 10:26:00 8378 1

原创 SmartShow 2.x 版重磅来袭

* 本篇文章已授权微信公众号guolin_blog(郭霖)独家发布:https://mp.weixin.qq.com/s/7qQdPLLfhZA_i7HjucfgWA各位老铁,SmartShow更新至2.7.6了,感谢大家一直以来的支持。2.x版跟1.x版相比,有重大的更新,也有值得分享的东西。SmartToastBadTokenException解决方案Android 7...

2018-11-11 16:30:01 3922 7

原创 Smart Toast and Snackbar:简化调用,并提高性能和用户体验!

  * 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布:https://mp.weixin.qq.com/s/l62PtbmrIOkVKfJ2r0JwEwApp的界面消息提示中,Toast和Snackbar是咱们经常打交道的哥俩,在使用的过程中,如果不加以封装和处理,调用的简易性以及性能和用户体验上就会存在诸多问题。下面给大家介绍一个我封装的库,SmartShow的...

2017-11-18 14:10:57 13858

原创 设计模式详解(三):工厂方法

通常对象被称之产品,而生产产品的工具称之为工厂,由于在这种设计模式中,是一个方法承担工厂的作用,所以称之为工厂方法。而是在A的父类中定义一个返回B类型对象的方法,通常该方法的返回值是接口类型或者BaseClass类型,允许A的子类覆盖该方法,返回不同的对象类型C,但需满足。方法,该方法负责创建一个视图对象,由于基类并不清楚子类会返回一个什么样的视图对象,所以该方法是一个工厂方法,返回值定义为基类。在父类A中,该方法既可以是抽象方法,也可以不定义为抽象方法(返回默认的B类型实例)。

2023-11-30 18:09:58 369

原创 设计模式详解(二):抽象工厂——Abstract Factory

在java中,定义了一组与数据库交互的接口,即可JDBC,由于不同数据库厂商的内部原理及运转必然不同,java无从得知,只能定义抽象接口让不同数据库厂商去实现。抽象工厂设计模式是将一组互有联系,成套提供对象的工厂方法从依赖方抽离出来,放到一个单独的类中,这个类充当一个总管的角色,管理这些工厂方法。中,我们知道,工厂方法是通过一个方法扮演对象工厂的角色,为依赖方提供对象,避免直接调用所依赖类的构造器,从而实现解耦的目的。不同厂商实现的Connection不同,Connection扮演抽象工厂的角色。

2023-11-27 17:08:24 216

原创 设计模式详解(一):工厂方法——Factory Method

在面向对象的编程语言里,我们通过对象间的相互协作,共同完成复杂的业务逻辑,因为对象之间存在着依赖关系。通常对象被称之产品,而生产产品的工具称之为工厂,由于在这种设计模式中,是一个方法承担工厂的作用,所以称之为工厂方法。而是在A的父类中定义一个返回B类型对象的方法,通常该方法的返回值是接口类型或者BaseClass类型,允许A的子类覆盖该方法,返回不同的对象类型C,但需满足。方法,该方法负责创建一个视图对象,由于基类并不清楚子类会返回一个什么样的视图对象,所以该方法是一个工厂方法,返回值定义为基类。

2023-07-12 17:34:11 558

原创 ArrayList底层原理

【代码】ArrayList底层原理。

2023-06-30 09:51:49 140

原创 HashMap原理(三):容量、加载因子、大小的含义

【代码】HashMap原理(三):容量、加载因子、大小的含义。

2023-05-31 18:50:39 972

原创 HashMap原理(三):hashmap扩容

【代码】HashMap原理(三):hashmap扩容。

2023-05-30 15:57:03 514

原创 HashMap原理(二):链表+红黑树解决哈希冲突

解决哈希冲突最常见的两种方法:链表法和开放寻址法。

2023-02-28 19:58:10 1178 1

原创 HashMap原理(一):哈希函数的设计

①哈希函数的作用与本质②哈希表容量为2的整数次幂及初始容量的校正③哈希表容量为2的整数次幂的缺陷及解决方案

2023-02-27 21:18:01 818

原创 Dagger2系列详解(四):@Module注解

Inject}…}…}}}@Module}}.build();@Component}}}}[

2022-11-28 22:05:16 183

原创 Dagger2系列详解(三):@privider 依赖

Inject}…}…}}}@Module}}.build();@Component}}}}[

2022-11-27 19:42:11 357

原创 Hilt 初探

/ public abstract TestInterface bindTestClass(TestClassTwo testClass //实现不同的 功能);Hilt就是Android团队联系了Dagger2团队,一起开发出来的一个专门面向Android的依赖注入框架。1、在项目结构的 build.gradle里面添加以下代码。2、在App结构的 build.gradle里面添加。//详见上面的 hilt 对应组件。2、提供一个实现接口的对象。1、提供一个待实现的接口。Hilt 做的优化包括。

2022-10-31 20:57:39 144

原创 Binder是什么

1.简介Binder是什么?机制:Binder是一种进程间通信的机制驱动:Binder是一个虚拟物理设备驱动应用层:Binder是一个能发起进程间通信的JAVA类Binder就是Android中的血管,在Android中我们使用Activity,Service等组件都需要和AMS(system_server)进行通信,这种跨进程的通信都是通过Binder完成。Activity,Service等组件和AMS不是同一个进程,其实也是多进程通信。为什么要用多进程?虚拟机给每一个进程分配的内存是有限制的,LMK会

2022-10-31 20:46:16 267

原创 归并排序及其复杂度

如果待排序的序列中存在两个或两个以上具有相同关键词的数据,排序后这些数据的相对次序保持不变,即它们的位置保持不变,通俗地讲,就是两个相同的数的相对顺序不会发生改变,则该算法是稳定的;第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;第三次归并后:{1,6,8,38,100,202,301},比较次数:4;如 设有数列{6,202,100,301,38,8,1}总的比较次数为:3+4+4=11;.

2022-08-31 22:18:40 387

原创 插入排序及其复杂度

我们假设第一张卡片已经排序,然后选择一张未排序的卡片。如果未排序的卡大于手上的卡,则将其置于右侧,否则将置于左侧。以同样的方式,其他未排序的卡片也会被取出并放在正确的位置。插入排序使用类似的方法。......

2022-08-31 22:12:44 1338

原创 选择排序及其复杂度

选择排序是通过不断地从元素中选出最小的元素放在它应该所处的位置上。例如第次选出的元素应该位于数组的处,如果不是,则将其与之交换位置,从0开始计数。也就是说,不断地从无序区域选择出最小的元素,放在无序区域的头部,也就是有序区域的末尾,这个元素是当前无序区域的最小元素,同时是有序区域的最大元素,本次选择过后,它成为有序区域的最后一个元素。不断地重复这个过程,直至所有元素都处在正确的位置上。初始状态下,整个数组是无序区域,有序区域为空集。......

2022-05-25 19:18:29 453

原创 冒泡排序及其复杂度

冒泡排序算法通过不断比较和交换(如有必要)数据集相邻的两个元素,直到他们有序为止。就像水底的气泡往水面上浮动一样,每一轮的比较和交换都会从无序区域浮出一个最大数,抵达有序区域的起始位置。

2022-05-08 15:43:37 10419

原创 Dagger2系列详解(二):@Component注解

Component是dagger完成注入流程的组织者和协调者,依赖诉求方通过@Inject表达注入诉求后,Component负责调用"生产车间"生产实例,然后调用成员注入器完成对诉求方的注入。

2020-09-10 16:53:55 939

原创 Dagger2系列详解(一):@Inject注解

@Inject的字面含义为“注入”,它的作用有两个:①表达依赖注入诉求②提供依赖表达依赖诉求用@Inject修饰了一个类的Field后,即表示向dagger框架表达注入诉求,要求获取一个该Field对应类型的对象。dagger框架将负责创建对象并赋予该Field。public class SuperMarket { @Inject protected Apple mApple; public SuperMarket() { }}上面的代码,SuperMarke

2020-09-07 14:26:50 2080

原创 markdown 文本 模板

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

2020-09-07 13:18:34 378

原创 Flutter系列之UI篇:线性布局——Flex,Row,Column

目录导航Flexdirection(children排列方向)mainAxisAlignment(主轴方向上的对齐方式)startFlexFlex类似于Android中的LinearLayout,构造方法如下: Flex({ Key key, @required this.direction, this.mainAxisAlignment = MainAxisAli...

2019-08-06 16:27:34 723

原创 Flutter系列之UI篇:图片显示——Image

`Image`是用来显示图片的`widget`,类似`android`中的`ImageView`。

2019-07-22 14:48:46 1472

原创 Flutter系列之异步篇:Future,Stream,Isolate

Dart是单线程执行模式(single-threaded execution model),Isoalte是对线程的上层封装,代表一个执行环境。不同执行环境(Isolate)之间内存不共享。 Dart的异步操作不一定在另一个线程(Isolate)中执行,而且通常是在同一个线程(Isolate)中执行。

2019-07-21 12:46:44 2269

原创 Flutter系列之UI篇:文本显示——RichText

RichText在App开发中,经常会遇到下面的情况:一个完整的字符串,字体颜色、大小等风格不同,而且部分文本还可以响应点击。在Android中,你可以将两个TextView拼在一起,指定不同的文本颜色,并为第二个TextView设置点击监听器。但这但笨拙了,通常的做法是通过SpannableString/SpannableStringBuilder为不同的文本片段指定不同的span,使其具...

2019-07-08 16:25:38 11606 1

原创 Flutter系列之UI篇:文本显示——Text,DefaultTextStyle

目录导航Text属性配置设置显示的文本文本方向文本对齐方式是否支持换行文本溢出最大行数限制文本风格设置文本垂直方向占据空间的风格配置(行间距、行高等)RichTextTextSpanText.rich VS RichTextDefaultTextStyleTextText继承StatelessWidget,用来显示文本,如Text("Hello,world!"),完整的构造器如下: con...

2019-07-01 11:12:23 6802

原创 Flutter系列之UI篇:flutter与android UI构建的区别—flutter widget VS android view

UI界面的组成元素在Android,UI界面的组成元素是View,一切界面元素都继承View类,由View衍生而来。而Flutter UI界面的组成元素是Widget,任何界面元素均继承Widget。可变性Android中View是可变的,当与用户交互或数据更新时可直接调用invalidate重绘,达到UI更新的目的。Flutter中Widget本身是不可变的(immutable)。那么F...

2019-06-25 10:16:02 1425

原创 Flutter系列之项目篇:入口代码解析

dart程序入口与android MainActivity的衔接。

2019-06-24 09:52:13 1430

原创 Flutter系列之项目&资源篇:项目结构、资源(图片、字符串)存放与引用、添加依赖

新建Flutter项目File→New→New Flutter Project,

2019-06-20 13:46:58 3200

原创 Flutter系列之开篇:环境搭建与配置

目录前言windows平台环境搭建mac平台环境搭建前言我们使用Java语言开发Android App时,需要配置Jdk环境。同样的,Flutter采用Dart语言开发App,所以需要配置Flutter Sdk环境(内置了Dart Sdk)。我们知道,现在风行的跨平台框架如React-Native等采用js作为开发语言。那么,Flutter为什么选择Dart语言?因为Dar...

2019-06-12 22:34:05 271

原创 android7.0版本适配(二):无法通过隐式广播监听网络连接

自android7.0开始,无法通过在清单文件中注册广播接收器来监听CONNECTIVITY_ACTION广播。很多app都会监听网络变化,单次网络变化会唤起所有静态监听该广播的应用并同时处理它。特别是那些根本没有启动进程的app,也不得不被唤起处理它,十分浪费性能。通过Context.registerReceiver()动态注册的广播依然可以收到CONNECTIVITY_ACTION广播,但不推荐那么做。

2019-06-04 18:16:48 521

原创 android7.0版本适配(一):应用间文件文件共享——FileProvider

自7.0开始,android不允许应用之间通过file://协议的Uri共享文件,否则将抛出FileUriExposedException异常。举个常见的使用场景:调用系统应用拍照,我们需要传递一个Uri,告诉照片的存储位置。

2019-05-31 13:35:08 4345

原创 Android6.0适配

Android6.0适配

2019-03-02 11:25:51 149

原创 Android5.0适配

a

2019-02-26 12:20:37 194

原创 Toast系列(五):还在被关闭通知无法显示Toast所困扰?解决方案来了

Toast工作原理依赖于通知,关闭应用通知权限后,Toast无法显示。在发布SmartShow1.0.0版的时候,我注意到了这个问题,立即用自己的手机(魅族pro 6 plus)对淘宝、优酷等知名app进行测试,发现关闭通知权限后,它们的“再按一次退出程序”的Toast无法显示。因为Toast的工作机制如此,我并没有把它当做一个问题看待。但是在前两篇文章发布时,关闭通知权限依然能够显示Toast的呼声之高,让我不得不着手解决这个问题。

2019-02-11 14:56:24 6729 1

原创 Toast系列(四):Android 7.1系统Toast BadTokenException解决方案

在Toast系列(二):Toast基本工作原理(android 7.1变化)中我们说到,Android7.1系统引入了Toast的一个bug——BadTokenException。本篇我们剖析下原因并给出解决方案。Android7.1开始,系统服务在将Toast请求加入队列时,为其创建一个Token。@Overridepublic void enqueueToast(String pk...

2018-10-30 22:43:54 1579

原创 Toast系列(三):Toast基本工作原理(android 8.0变化)

上篇文章说道,Android 7.1 Toast 引入了一个系统bug——BadTokenException。Google在android 8.0及时进行了补救。Toast源码也发生了相应变化。android 8.0开始,Toast的TN对象的show和hide方法,均改为通过TN对象的handler发送Message消息,然后在handleMessage方法里处理。1.show和hide...

2018-09-29 22:36:15 1571

原创 Toast系列(二):Toast基本工作原理(android 7.1变化)

任何UI都是通过window的方式来展现,如Activity,Dialog等,Toast也不例外,每种window添加时都会指定类型,Toast的类型为TYPE_TOAST。TN() { final WindowManager.LayoutParams params = mParams; ... params.type...

2018-08-12 17:06:12 1455

原创 Toast系列(一):Toast基本工作原理(android 7.0及以前)

Toast是一个独立的顶级窗口,显示时浮在其他窗口之上,不依赖于任何Activity,即使在任何activity未启动的情况下或者当前位于前台的程序是别的app时,依然可以显示。各个app都可以随心所欲地在屏幕上弹出Toast,为了避免“百花齐放”,必须有第三者来管理,使其顺序显示。这个第三者就是系统服务INotificationManager。INotificationManager会维护一...

2018-08-08 10:51:03 13897

空空如也

空空如也

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

TA关注的人

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