- 博客(33)
- 收藏
- 关注
原创 Kotlin学习之路(4)——类,对象和接口
类,对象和接口之前的篇章已经简单的介绍过如何声明一个类,也知道了一些简单的主构造方法来声明方法和属性,以及使用枚举类。类和接口接口和Java相同的是,我们同样用interface来定义一个接口:interface Clickable{ fun click()}除了定义,还需要学习如何实现一个接口:class Button: Clickable{ //kotlin中重写一个方法使用override修饰符是强制的 override fun click() {
2022-01-14 23:35:04
1756
1
原创 Kotlin学习之路(3)——函数的定义与调用
函数的定义与调用让函数更好调用命名参数使用Java这种面向对象函数,我们肯定会经常遇到函数调用,例如:joinToString(list, "; ", "[", "]")当我们第一次调用这种函数时就很懵,不知道每一个参数的含义,就造成了不必要的麻烦。当调用一个Kotlin定义的函数时,可以显示的表明参数的名称。 如果在调用一个函数时你指明了某一个参数的名称,那么为了避免混淆,你需要指明所有i的参数名称,例如:joinToString(list, separator = "; ", prefi
2022-01-08 15:54:21
1792
原创 Kotlin学习之路(2)——Kotlin的基础
Kotlin基础函数函数用关键字fun来声明,fun后面包括了函数名称,函数参数列表,函数返回值,举例如下:fun max(a: Int, b: Int) : Int{ return if(a>b) a else b}在kotlin中也可以用表达式来代替返回值,比如下面:fun max(a: Int, b: Int) = if(a>b) a else b这里虽然少了返回类型,但是kotlin自带类型推导,它会根据表达式类型自动推导出返回结果,只是隐式的拥有一个返回值。
2022-01-06 15:11:29
1746
原创 Kotlin学习之路(1)——Kotlin的概念
Kotlin的概念特点:简洁,语法简单且易入手安全,可以减少或避免空指针异常务实,可以配合插件与编译环境,更容易解决项目中的问题互操作性,Kotlin可以和Java互相调用和切换类型:静态类型,也就是所有表达式类型说在编译期就可以确定下来静态类型的好处:性能比较好,不用在运行期才判断调用的是哪个方法。可靠性比较好,减少了运行期崩溃的几率。支持面向对象和函数式编程两种编程风格。函数式编程的好处:简洁,让代码更简练,比如说两个相似功能的函数,可以将公共部分提炼到一个函数中,然后
2022-01-06 15:10:32
950
原创 ArrayList源码解读
ArrayList源码解读ArrayList简介下文简介翻译自ArrayList源码注释。List接口的可调整大小的数组实现。 实现所有可选的列表操作,并允许所有元素,包括null 。 除了实现List接口之外,该类还提供了操作内部用于存储列表的数组大小的方法。 (这个类大致相当于Vector ,只是它是不同步的。)size 、 isEmpty 、 get 、 set 、 iterator和listIterator操作在恒定时间内运行。 add操作在分摊常数 time 内运行,即添加 n 个元素需
2021-08-13 19:18:35
204
1
原创 RxJava3.x入门(七)——背压策略
RxJava3.x入门(七)——背压策略一、背压简介上下游在不同的线程中,通过Observable发射,处理,响应数据流时,如果上游发射数据的速度快于下游接收处理数据的速度,这样对于那些没来得及处理的数据就会造成积压,这些数据既不会丢失,也不会被垃圾回收机制回收,而是存放在一个异步缓存池中,如果缓存池中的数据一直得不到处理,越积越多,最后就会造成内存溢出,这便是响应式编程中的背压(backpressure)问题。背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被
2021-08-02 10:08:57
1349
原创 RxJava3.x入门(六)——条件操作符
RxJava3.x入门指南(六)——条件操作符条件操作符汇总1.all()作用:判定是否Observable发射的所有数据都满足某个条件代码演示: Observable.just(1,2,3,4,5) .all(new Predicate<Integer>() { @Override public boolean test(Integer integer)
2021-07-30 16:55:04
817
原创 RxJava3.x入门(五)——功能操作符
RxJava3.x入门指南(五)——功能操作符一、线程调度操作符1.subscribeOn()作用:指定被观察者的线程,如果多次调用此方法,只有第一次有效。代码演示: Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull ObservableEmitter<Integer&g
2021-07-30 15:59:35
625
原创 RxJava3.x入门(四)——过滤操作符
RxJava3.x入门指南(二)——过滤操作符一、根据指定事件条件过滤事件1.filter()作用:通过一定逻辑来过滤被观察者发送的事件,如果返回true则发送事件,否则不会发送代码演示: Observable .just(1,2,3,4,5) .filter(new Predicate<Integer>() { @Override
2021-07-30 11:29:47
399
原创 RxJava3.x入门(三)——组合操作符
RxJava3.x入门指南(三)——组合操作符和过滤操作符组合操作符一、合并观察者操作符1.concat()/concatArray()作用:组合多个被观察者一起发送数据,合并后 按发送顺序串行执行两者区别:组合被观察者的数量,即concat()组合被观察者数量≤4个,而concatArray()则可>4个代码演示: Observable.concat(Observable.just(1,2,3),Observable.just("x","y","z"))
2021-07-30 10:31:56
644
原创 RxJava3.x入门(二)——创建操作符和变换操作符
RxJava3.x入门指南(二)——创建操作符和变换操作符创建操作符一、基础创建1.create()使用Create操作符创建一个完整的Observable,可以传递onNext,onError和onCompleted等事件。代码演示: Observable.create((ObservableOnSubscribe<Integer>) e -> { e.onNext(1); e.onNext(2);
2021-07-30 09:21:19
562
原创 RxJava3.x入门(一)——概述及使用
RxJava3.x入门指南(一)RxJava简介ReactiveX是Reactive Extensions的缩写,一般简写为Rx。Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava/RxJS/Rx.NET…其有一下特点:观察者模式函数式风格:对可观察数据流使用无副作用的输入输出函数,避免了程序里错综复杂的状态简化代码 :Rxjava的操作符通常可以将复杂的难题简化为很少的几行代码异
2021-07-29 18:39:26
962
原创 Android网络框架OkHttp源码分析(2)——拦截器分析
Android网络框架——OkHttp源码分析本文基于Kotlin语言讲解上一篇文章:Android网络框架OkHttp源码分析(1)——请求流程讲解了OkHttp的请求流程,这篇文章进入第二部分——OkHttp的拦截器分析。OkHttp源码分析之拦截器分析上一章节中发送请求的过程中有一个重要的方法getResponseWithInterceptorChain(),里面会创建许多拦截器,它们会在请求发送到服务器之前对请求做一系列的处理,在服务器返回响应之后,同样这些拦截器对响应做了一系列处理
2021-07-23 14:58:09
181
1
原创 Android网络框架OkHttp源码分析(1)——请求流程
Android网络框架——OkHttp源码分析前言OkHttp是一个处理网络请求的高性能框架,由Square公司贡献。它的出现替代了HttpUrlConnection和Apache HttpClient。OkHttp采用了分层设计的思想,使用多层拦截器,每个拦截器解决一个问题,多层拦截器套在一起,就像设计模式中的装饰者模式一样,可以在保证每层功能高内聚的情况下,解决多样性的问题。OkHttp源码的讲解可以分为两大部分:请求流程拦截器分析接下来讲解第一部分:okhttp3源码分析之请求流
2021-07-20 21:52:55
384
3
原创 Android网络框架——Retrofit源码分析
Retrofit源码解析Retrofit是一个RESTFUL的HTTP网络请求框架(基于OkHttp)。Retrofit的具体流程如下:创建Retrofit实例创建网络请求接口的实例(通过解析注解配置网络请求参数)发送网络请求解析数据切换线程处理结果下来我们一一进行讲解。一、创建Retrofit实例通过内部类Builder(建造者模式)创建出一个Retrofit实例,其具体创建过程配置了一下参数:平台类型对象(Platform—Android)网络请求的url地址(baseU
2021-07-18 21:10:44
288
原创 详解View的工作原理
View的工作原理View的流程主要包括测量流程(measure)、布局流程(layout)、绘制流程(draw)。当然除了View的这三大流程外,我们也应该了解一些View的基础概念以及View是怎么一步步绘制出来的。我们先看下Android在UI方面的层级关系。ViewRoot和DecorViewViewRoot是ViewRootImpl类的实现,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。当Activity对象被创建完
2021-06-03 17:00:28
313
2
原创 View的事件体系——View的滑动冲突
View的事件体系——View的滑动冲突滑动冲突,当界面内外两层都可以进行滑动时,就会出现滑动冲突,这是一个非常让人困扰的问题,但是当你足够理解View的分发机制时,这些问题就很好解决了。1.常见的滑动冲突场景...
2021-05-12 19:58:00
289
2
原创 View的事件体系——View的事件分发机制
View的事件分发机制事件分发机制是View事件体系中的核心知识点,View的滑动冲突问题的解决方法就是基于View的分发机制,因此理解掌握View的分发机制是十分重要的。1.点击事件的传递规则《View的事件体系——View的基础知识》一文中我们已经介绍了MotionEvent,即手指触碰屏幕后所产生的一系列事件。所谓的事件分发机制实质就是对MotionEvent事件的分发过程,也就是说当一个MotionEvent产生后,系统需要把这个事件传递到一个具体的View处理,而这个过程就称为分发过程。
2021-05-11 21:53:57
288
2
原创 View的事件体系——弹性滑动
View的事件体系——弹性滑动在知道了View的滑动以后,我们还应该知道如何实现View的弹性滑动,因为比较生硬的划过去对用户的体验是极差的,所以我们应该实现渐进式滑动。实现弹性滑动的方式就是将一次大的滑动分成若干次小的滑动,并且在一定时间段内完成即可下面我们将介绍三种弹性滑动的方式:使用Srcoller使用动画使用延时策略1.使用Scroller在《View的事件体系——View的基础知识》一文中我们简单介绍了Scroller及其简单用法。本文我们将探究Scroller如何实现弹性滑
2021-05-11 12:06:08
179
1
原创 View的事件体系——View的滑动
View的滑动在Android应用中,滑动已经成为标配,下拉刷新,左滑选择删除,ViewPager…它们的基础都是滑动。所以,滑动在Android开发中具有很重要的作用我们将介绍三种View的滑动方式:使用scrollTo/scrollBy使用动画改变布局参数1.使用scrollTo/scrollBy我们看一下scrollTo和scrollBy的源码: public void scrollTo(int x, int y) { if (mScrollX != x |
2021-05-10 17:23:24
250
2
原创 View的事件体系——View的基础知识
View基础知识View不属于Android四大组件,但是它的作用甚至超过了四大组件,当Android系统所提供的基础控件不能满足我们的需求时,我们就需要自定义View来满足我们的需求,这就需要我们对View体系有深入的理解。为了更好地了解View的内容,我们将介绍:View的位置参数,MotionEvent,TouchSlop对象,VelocityTracker对象,GestureDetector对象和Scroller对象。1.什么是View众所周知,Android中有许许多多的基础控件,例如:B
2021-05-10 16:48:41
477
1
原创 ThreadLocal的使用与原理
ThreadLocal的使用与原理ThreadLocal的简介ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获取到数据。ThreadLocal提供了一种与众不同的线程安全方式,它不是在发生线程冲突时想办法解决冲突,而是彻底的避免了冲突的发生。ThreadLocal的基本使用首先创建一个ThreadLocal对象:private ThreadLocal<Integer> mI
2021-05-08 18:09:04
211
4
原创 IntentFilter的匹配规则
IntentFilter的匹配规则启动Activity分为显式调用和隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。IntentFilter中的过滤信息有action,category,data。一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter,即可成功启动对应的Activity。action的匹配规则action的匹配规则是Intent中的action必须能够和过滤规则中的acti
2021-04-28 12:52:32
470
1
原创 Android进阶——Activity的生命周期和启动模式
前言本文会讲述一些Activity在正常情况和异常情况下的生命周期分析,Activity启动模式任务栈的图解以及Activity中IntentFilter过滤器的匹配规则,不会讲述生命周期和启动模式的基本概念。如果需要关于Activity的生命周期和启动模式基础知识,可以查看如下博客:Android初体验——活动的状态与周期Android初体验——活动的启动模式Activity正常情况下的生命周期分析1.特定场景下Activity的生命周期分析当开启一个新的Activity时,由于是第一
2021-04-28 11:43:14
348
原创 详解Android的消息机制
Android的消息机制本人初学Android,可能会因为文章中的一些错误而对您造成了困扰,万分抱歉,如有错误欢迎您在评论区指正。文章目录Android的消息机制概述一、pandas是什么?二、使用步骤1.引入库2.读入数据总结概述Handler是Android消息机制的上层接口,所以Android的消息机制主要指的就是Handler的运行机制,其主要应用于UI线程(主线程)和子线程之间的交互。众所周知,一般情况下,出于安全的考虑,所有与UI控件的操作都要放在主线程,而一些耗时的I/O操作应
2021-04-23 22:32:36
1165
3
原创 Android 全局大喇叭——详解广播机制
Android 全局大喇叭——详解广播机制一、广播机制简介1. 标准广播(Normal broadcasts)2. 有序广播(Ordered broadcasts)二、接收系统广播1. 动态注册监听网络变化2. 静态注册实现开机启动提示三、发送自定义广播1. 发送标准广播2. 发送有序广播一、广播机制简介安卓的每个程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接受到自己所关心的广播内容,这些广播可以来自系统,也可以来自其他应用程序。Android提供了一套完整的API来允许应用自由地接受和发送
2020-09-13 22:19:40
666
原创 Android碎片的状态与周期
Android——碎片的生命周期前言一、碎片的状态1. 运行状态2. 暂停状态3. 停止状态4. 销毁状态二、碎片的活动周期前言在这之前我们学习了活动的状态与生命周期,其实碎片也有它自己的生命周期,并且它和活动的生命周期非常相似,下面我们一起来许学习它的生命周期。一、碎片的状态活动有四个不同的状态:运行状态、暂停状态、停止状态、销毁状态。类似地,碎片也有这些状态,只不过它们的状态会有一些细小的区别。1. 运行状态当一个碎片可见时,并且与他关联的活动正在处于运行状态时,该碎片也处于运行状态。
2020-09-11 21:01:51
399
1
原创 Android UI篇——碎片
Android UI——碎片fragment碎片是一种嵌入在活动中的UI片段,它能使程序更加合理和充分地利用大屏的空间,因而在平板上地应用更加广泛。碎片的简单用法:新建一个项目unit4,分别建立左侧碎片和右侧碎片。左侧碎片中只放置一个按钮,编写left_fragment.xml:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/re
2020-09-07 20:10:04
217
原创 Andorid UI篇——RecyclerView
Andorid UI篇——RecyclerView上一篇文章简单的介绍了ListView,如果没有一些技巧来提升它的运行效率,它的性能就会非常差,并且它不能实现横向的滚动。为此,Android提供了一个更强大的滚动控件——RecyclerView。RecyclerView的基本用法...
2020-09-06 14:36:47
154
原创 Android UI篇——ListView
Android UI篇——ListViewListView是一个用来纵向显示条目的视图,这些条目内容来自于与该ListView相关联的ListAdapter.ListView的简单用法先新建一个项目吧!创建了主活动MainActivity后,我们修改在activity_main.xml中的代码:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com
2020-09-05 11:54:09
262
原创 Android初体验UI篇——四种基本布局
Android初体验UI篇——四种基本布局四种基本布局1. 线性布局(LinearLayout)相对布局(RelativeLayout)合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入四种基本布局一个丰富的界面由许许多多的控件组成,为了控
2020-08-14 20:04:42
221
原创 Android初体验——活动的启动模式
Android初体验——活动的启动模式使用方法简述四种活动启动模式前提1. standard2. singleTop3. singleTask4. singleInstance使用方法AndroidManifest.xml中通过给< activity >标签指定android:lauchMode属性来选择启动模式简述四种活动启动模式在实际的项目开发中,我们会根据不同的需求为每个活动指定特定的启动模式。启动模式一共分为四种,分别是standard,singleTop,singleTask,
2020-08-10 11:21:05
255
原创 Android初体验——活动的状态与周期
初始Android——活动的生命周期①返回栈②活动状态(四种状态)1. 运行状态2. 暂停状态3. 停止状态4. 销毁状态③活动的生命周期(七个周期)1.onCreat()2.onStart()3.onResume()4.onPause()5.onStop()6.onDestroy()7.onRestart()①返回栈Android是用任务(Task)来管理活动的,每个任务就是一个栈里所有活动的集合,这个栈我们一般成其为返回栈(Back Stack)。默认情况下,每当我们启动新的活动,它就会入栈也就是处
2020-08-09 22:11:21
302
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人