自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Activity启动流程

当APP通过ActivityManager的startActivity方法请求启动一个Activity时,它会获取Instrumentation对象来确定启动哪个Activity。

2024-04-14 12:04:00 953

原创 【Android】图解View的工作流程原理

View的工作流程就是measure layout和draw- measure用来测量View的宽和高- Layout用来确定View的位置- draw用来绘制View

2024-04-06 16:48:27 776

原创 【Android】图解View事件分发机制

View的事件分发机制是Android中非常核心的一个概念,它负责处理触摸事件(如按下、移动、抬起等)的分发过程。当一个触摸事件发生时,这个事件首先会被传递到顶层的 ViewGroup(比如一个 Activity 的根布局),然后通过。View 的事件分发机制主要是通过。方法来决定如何分发这个事件。

2024-03-20 21:23:30 994

原创 【Android】View事件体系基础

View事件体系基础知识,坐标系、View滑动、、解析Activity的构成。坐标系分为Android坐标系和View坐标系

2024-02-27 19:01:18 750

原创 【网络编程】从Retrofit原理来看HTTP

解析Retrofit的源码,分三部分看看他是如何验证接口的:- 第一部分简单判断这个类引用是否为接口(!service.isInterface()),否则抛出异常.- 第二部分,这里是先创建了一个双向队列(ArrayDeque),然后并将这个service添加到队列中。然后进入一个循环,直到队列为空。在每次循环中,从队列的开头取出一个service用

2024-02-23 14:33:35 1225 2

原创 【网络编程】okhttp源码解析

【网络编程】okhttp源码解析。

2024-02-21 15:20:18 1132

原创 【网络编程】Volley使用与源码分析

在2013年Google I/O大会上推出了一个新的网络通信框架Volley。Volley既可以访问网络取得数据,也可以加载图片,并且在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

2024-02-20 16:38:15 919

原创 【网络编程】入门HTTP

HTTP协议的主要特点- 支持C/S(客户/服务器)模式。- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省

2024-02-19 14:41:55 1057

原创 【Kotlin】基础变量、集合和安全操作符

在Kotlin中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数和属性。 一些java中的基本数据类型可以有特殊的内部表示——例如,数字(int)、字符和布尔值可以在运行时表示为原生类型值

2023-12-19 18:10:37 2617 2

原创 【Android】Glide的简单使用(下)

Glide的使用方法详细介绍(下)

2023-12-06 11:15:42 1440

原创 【Android】Glide的简单使用(上)

Glide是Google员工的开源项目,Google官方App中已经使用,在2015年的Google I/O上被推荐。Glide的优点: 使用简单,可配置度高,自适应程度高,支持多种数据源,网络、本地、资源、`Assets`等,支持`Gif`图片。

2023-12-05 13:56:12 1410

原创 【Android】EventBus的使用

EventBus是一个用于简化组件间通信的开源库,它使用`发布-订阅`模式(Pub-Sub)来实现事件的传递。在Android开发中,不同的组件(例如Activity、Fragment、Service等)之间可能需要进行通信,例如一个组件发送一个事件,而其他组件可以订阅并接收该事件。这种通信方式可以帮助组件之间解耦,使代码更加清晰和可维护。

2023-12-04 09:15:00 1316

原创 【网络编程】Retrofit创建实例源理

对retrofit的创造实例过程进行源码剖析。

2023-12-03 19:56:56 919

原创 【Android】MMKV实现本地持久化

MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。近期也已移植到 Android / macOS / Win32 / POSIX 平台,一并开源

2023-12-03 15:01:07 968

原创 【Android】布局优化方案

安卓中,布局优化的核心问题就是要解决因布局渲染性能不佳而导致应用卡顿的问题。

2023-12-02 11:56:37 1573

原创 【Android】Window和WindowManager

《安卓开发艺术探索》第八章笔记

2023-12-02 11:53:29 1151

原创 【Android】MotionLayout实现动画

MotionLayouut是Android支持库中的一个布局容器,它可以帮助实现复杂的界面动画和过渡效果。MotionLayout结合了ConstraintLayout和MotionScene的功能,可以通过定义关键帧和过渡效果来创建各种复杂的动画效果。创建和应用约束关系:添加和修改约束关系:移除约束关系:我们可以使用 ConstraintSet 和 TransitionManager 来实现一个平移动画。在xml根布局改成MotionLayout后,爆红,可利用编译

2023-12-01 13:28:57 2614

原创 序列化-Serializable和Parcelable

在Android开发中,Serializable是一种用于将对象序列化和反序列化的接口。它是Java的标准序列化方式,可以在任何Java平台上使用。

2023-11-30 22:09:03 942

原创 【Android Jetpack】ViewBinding 视图绑定

ViewBinding是Google在2019年I/O大会上公布的一款Android视图绑定工具,在Android Studio 3.6中添加的一个新功能,更准确的说,它是DataBinding的一个更轻量变体。还有在Adapter中的使用,因为布局不是只创建一次,而是每个item都会创建,不能像上面那样在Adapter里写一个binding全局变量,不然binding只会得到最后一次创建的视图。另一个变量用于避免使用!您可以在需要高级功能的布局中使用数据绑定,而在不需要高级功能的布局中使用视图绑定。

2023-11-29 17:45:45 1219

原创 【Android Jetpack】Room数据库

`Room`包含以下三个重要组成部分: Database`:使用注解申明一个类,注解中包含若干个`Entity`类,这个`Database`类主要负责创建数据库以及获取数据对象的。 `Entities`:表示每个数据库的总的一个表结构,同样也是使用注解表示,类中的每个字段都对应表中的一列。 `DAO`:`Data Access Object`的缩写,表示从从代码中直接访问数据库,屏蔽`sql`语句。

2023-11-29 17:44:04 1182

原创 【Android Jetpack】Lifecycle 感知生命周期

Google提供了LifeCycle作为解决方案。LifeCycle可以帮助开发者创建可感知生命周期的组件。这样,组件便能够在其内部管理自己的生命周期,从而降低模块间的耦合度,并降低内存泄漏发生的可能性。LifeCycle不只对Activity/Fragment有用,在Service和Application中也能大显身手。

2023-11-28 17:57:19 1133

原创 【Android Jetpack】Hilt 依赖注入框架

Hilt支持最常见的Android类Application、Activity、Fragment、View、Service、BroadcastReceiver等等,但是您可能需要在Hilt不支持的类中执行依赖注入,在这种情况下可以使用@EntryPoint注解进行创建,Hilt会提供相应的依赖。常用于创建依赖类的对象(例如第三方库 OkHttp、Retrofit等等),使用@Module注解的类,需要使用@InstallIn注解指定module的范围。Hilt需要知道如何从相应的组件中提供必要依赖的实例。

2023-11-28 17:54:11 1148

原创 【Android Jetpack】Navigation的使用

为了方便管理,Jetpack引入了NavigationUI组件,使App bar中的按钮和菜单能够与导航图中的页面关联起来。页面的切换通常还包括对应用程序App bar的管理、Fragment间的切换动画,以及Fragment间的参数传递。是一个特殊的Fragment(android:name所定义的),我们需要将其添加到Activity的布局文件中,作为其他Fragment的容器,然后定义Fragment。元素是导航图的根元素。

2023-11-27 12:50:52 1103 1

原创 【Kotlin】内联函数

简单的来说,我们可以用inline关键字来修饰函数,这些函数就称为了内联函数。而内联函数所引用的Lambda表达式允许使用return关键字进行函数返回,但是由于我们是在匿名类中调用的函数类型参数,此时是不可能进行外层调用函数返回的,最多只能对匿名类中的函数调用进行返回,因此这里就提示了上述错误。非局部返回尤其在循环控制中显得特别有用,比如Kotlin的forEach接口,它接收的就是一个Lambda参数,由于它也是一个内联函数,所以我们可以直接在它调用的Lambda中执行return退出上一层的程序。

2023-11-27 08:17:26 1244 1

原创 【Kotlin】高阶函数和Lambda

Kotlin天然支持了部分函数式特性。我们可以在一个函数内部定义一个局部函数。抽象和高阶函数在我们以往熟悉的编程中,过程限制为只能接收数据为参数由于我们经常会遇到一些同样的程序设计模式能够用于不同的过程,比如一个包含了正整数的列表,需要对它的元素进行各种转换操作,例如对所有元素都乘以3,或者都除以2。我们就需要提供一种模式,同时接收这个列表及不同的元素操作过程,最终返回一个新的列表为了把这种类似的模式描述为相应的概念,我们就需要构造出一种更加高级的过程,表现为:接收一个或多个过程为参数,或者以一个过程作

2023-11-26 11:02:22 2120

原创 【Kotlin】类与接口

构造函数和初始化块函数属性嵌套类和内部类对象声明你可以将类想象成一个对象的模板,因为它告诉编译器如何创建该特定类的对象。它还将告诉编译器每个对象应该具有哪些属性,并且从该类生成的每个对象都可以拥有自己独有的属性值。例如,每个Dog对象都有自己的名称、重量和品种属性,每个Dog的属性值都可以是不同的。数据类通常需要重写equals()hashCode()toString()这几个方法.但是在Kotlin中你只需要一行代码。数据类是一种非常强大的类:使用Kotlin。

2023-11-26 11:01:23 1509 4

原创 【Kotlin】引入与基础语法

field指的是属性的支持字段,你可以将其视为对属性的底层值的引用。因此,val声明的变量是只读变量,它的引用不可更改,但并不代表其引用对象也不可变。,将x的值赋为6,此时会创建一个值为6的新Int对象,并且x会存放该对象的引用。效果(我们通过查看对val语法反编译后转化的java代码,从中可以很清楚的发现它是用final实现的),也就是引用不可变。相反,该对象的引用会被赋值给该变量。需要注意的是,我们在使用的时候,一定要确保属性是被初始化过的,通常先调用初始化方法,否则会有异常。

2023-11-26 11:00:38 1288

原创 【Rxjava详解】(七)线程调度原理

rxjava最终章

2023-11-25 12:23:24 784

原创 【Rxjava详解】(六)操作符执行原理

解析一些常见操作符的执行原理,它们都会交给`Observablexxx`去执行,然后在进行自己的处理。

2023-11-25 12:20:56 481

原创 【Rxjava详解】(五)执行原理

从源码的角度去分析一下`RxJava`的各个角色的api原理,以及如何进行线程切换和导致内存泄漏的原因。

2023-11-24 14:53:02 450

原创 【Rxjava详解】(四)线程切换

`RxJava`遵循的是线程不变的原则,即在哪个线程调用`subscribe()`方法就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。也就是说事件的发出和消费都是在同一个线程的。观察者模式本身的目的就是『**后台处理,前台回调**』的异步机制,因此异步对于`RxJava`是至关重要的。而要实现异步,则需要用到`RxJava`的另一个概念:`Scheduler`。

2023-11-24 13:42:51 1275

原创 【Rxjava详解】(三)更好实践异步请求

用RxJava可以通过链式调用的方式简化异步编程,将异步操作以流式的方式表达出来。

2023-11-23 10:06:58 211

原创 【Rxjava详解】(二) 操作符的妙用

RxJava提供了丰富的操作符来处理和转换数据流。操作符是 RxJava 的核心组成部分,它们提供了一种灵活、可组合的方式来处理数据流,使得开发者可以更加便捷地进行数据处理和流程控制。

2023-11-23 00:15:24 392

原创 【Rxjava详解】(一)观察者模式的拓展

Rx基于观察者模式,它是一种编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流。`ReactiveX.io`给的定义是,Rx是一个使用可观察数据流进行异步编程的编程接口,`ReactiveX`结合了观察者模式、迭代器模式和函数式编程的精华。`Rx`已经渗透到了各个语言中,有`RxJava`、`RxJS`、`RxSwift`等等

2023-11-22 10:20:57 240

原创 【Android Jetpack】LiveData-观察数据的容器

LiveData是一个可被观察的数据容器类。具体说来,可以将LiveData理解为一个数据的容器,它将数据包装起来,使数据成为被观察者,当该数据发生变化时,观察者能够获得通知。我们不需要自己去实现观察者模式,LiveData内部已经默认实现好了,我们只要使用就可以了。

2023-11-21 01:28:26 250

原创 【Android Jetpack】理解ViewModel

ViewModel是专门用于存放应用程序页面所需的数据。ViewModel将页面所需的数据从页面中剥离出来,页面只需要处理用户交互和展示数据。 Viewmodel解决两个问题: 1. 数据的变更与view隔离,也就是解耦 2. 开发者不需要额外去关心因为屏幕旋转带来的数据恢复问题

2023-11-20 19:40:47 282

原创 【Android Jetpack】DataStore的介绍

Jetpack DataStore是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore使用Kotlin协程和Flow以异步、一致的事务方式存储数据。

2023-11-19 23:41:40 527

原创 浅析Retrofit2

`retrofit`和`retrofit2`的区别在于同步和异步定义以及执行方式,Converter,并且可以自定义Gson对象,具有新的URL定义方式,在reofit2中,即使response存在问题onResponse依然被调用。

2023-10-17 22:35:18 42

原创 【动规】子序列问题

java;动态规划;子序列问题

2023-07-31 09:06:23 47 1

原创 Android开发——入门Intent

安卓入门,Intent

2023-07-21 17:20:37 178 1

空空如也

空空如也

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

TA关注的人

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