自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

松仔Log的博客

随便看看呗

  • 博客(234)
  • 收藏
  • 关注

原创 Android开源库——Glide

Android的图像加载和缓存库,专注于平滑滚动。

2025-03-22 21:40:32 835

原创 Android开源库——RxJava和RxAndroid

RxJava是基于JVM的响应式扩展,用于编写异步代码RxAndroid是关于Android的RxJava绑定。

2025-03-15 17:57:54 1169 1

原创 Android开源库——Retrofit

一个类型安全的 HTTP 客户端,适用于 Android 和 Java。

2025-03-07 03:04:14 235

原创 Java多线程——内存模型

对于如下代码,可能输出(0,1)/(1,0)/(1,1)/(0,0)

2025-02-24 18:09:18 404

原创 Java多线程——原子变量与非阻塞同步机制

处理器针对共享数据的并发访问提供了一些特殊指令,操作系统和JVM可以用其实现锁和并发的数据结构,比加锁的方式拥有更好的性能。

2025-02-24 01:30:57 459

原创 Java多线程——构建自定义的同步工具

AQS用于构建锁和同步器的框架,ReentrantLock、Semaphore 、CountDownLatch、 ReentrantReadWriteLock、 SynchronousQueue和 FutureTask是基于AQS 构建的,它们没有直接扩展AQS,而是委托给私有子类。

2025-02-23 16:46:28 368

原创 Java多线程——显式锁

ReentrantLock实现了Lock,提供了和synchronized相同的互斥性和内存可见性,需要显式获取和释放锁。

2025-02-22 00:54:35 225

原创 Java多线程——并发程序的测试

相比于串行程序,并发程序潜在的错误发生是随机的,并发测试分为。

2025-02-21 01:31:43 910

原创 Java多线程——性能与可伸缩性

当增加计算资源时(如CPU、内存、存储容量或I/O带宽),程序的吞吐量或处理能力能相应的增加。

2025-02-16 17:54:28 310

原创 Java多线程——避免活跃性危险

当两个线程以不同的顺序来获得相同的锁。

2025-02-15 01:25:11 154

原创 Java多线程——线程池的使用

可将对象转为ThreadPoolExecutor,再调用对应属性的setter方法,但newSingleThreadExecutor除外,其使用unconfigurableExecutorService封装,只暴露了ExecutorService中的方法。线程池通过线程工厂创建线程,默认线程工厂创建一个新的非守护线程,可通过重新ThreadFatory的newThread方法自定义配置信息,每次创建线程都会调用该方法。执行时间较长的任务不仅会造成线程池阻塞,也会增加执行时间较短的任务的服务时间。

2025-02-12 20:39:43 834

原创 Java多线程——任务执行和取消

Executor基于生产者—消费者模式,用Runnable表示任务,提交任务操作相当于生产者,执行任务的线程相当于消费者。

2025-02-10 15:24:40 755

原创 Java多线程——基础构建模块

当通过复合操作并发修改容器时,可能出现线程不安全的问题A/B两个线程运行情况可能如下创建新操作时,应该和容器的其他操作一样都是原子操作,使用容器自身的锁保护方法同理,在遍历Vector时,size可能被其他线程修改,同样需要加锁加锁会影响性能,可以通过克隆容器(克隆时需要加锁),并在副本上进行迭代。

2025-02-06 17:54:35 880

原创 Java多线程——对象的组合

通过自身的内置锁增加了一层额外的加锁,即使List不是线程安全的或者修改了它的加锁实现,ImprovedList仍是线程安全的。但上面的做法是错误的,因为synchronizedList内部的锁和ListHelper的锁不是同一个。客户端加锁是指,对于使用某个对象X的客户端代码,使用X本身用于保护其状态的锁来保护这段客户代码。若需要非实时更新且只读的对象引用,因为map内容是不可变的,可以浅拷贝。但会将类的加锁代码放到与其完全无关的其他类中,会破坏同步策略的封装性。但数据量大时,每次拷贝会降低性能。

2025-02-02 00:46:08 649

原创 Java多线程——对象的共享

一个线程修改了对象状态后,其他线程能够看到发生的状态变化如上,子线程判断ready和输出number,主线程修改后,可能出现数据在多个线程共享时,就应该使用同步确保可见性。

2025-01-31 15:58:56 829

原创 Java多线程——线程安全性

当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的无状态对象是线程安全的,其不包含任何域,也不包含任何对其他类中域的引用,调用过程产生的临时状态也仅存在于线程栈上的局部变量中。

2025-01-29 20:39:34 364

原创 Jetpack——viewbinding

视图绑定是一项可让您更轻松地编写与视图交互的代码的功能。在模块中启用视图绑定之后,系统会为该模块中的每个XML布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有ID的所有视图的直接引用。

2025-01-18 16:15:00 180

原创 JetPack——databing

<variable

2025-01-17 01:29:06 742

原创 JetPack——ViewModel

ViewModel类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关的业务逻辑。它的主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。这意味着在activity之间导航时或进行配置更改后(例如旋转屏幕时),界面将无需重新提取数据。则可以通过byviewModels()简化初始化,其是ComponentActivity的扩展函数,本质是通过ComponentActivity提供的默认工厂/参数创建ViewModel。如下是MVP架构中播放暂停按钮的实现。

2025-01-08 22:29:36 821

原创 Jetpack——LiveData

LiveData是一种可观察的数据存储器类,与常规的可观察类不同,LiveData具有生命周期感知能力,意指它遵循其他应用组件(如activity、fragment或service)的生命周期。向MutableLiveData注册监听和值变化时的回调,除此之外Activity就只有UI更新的代码了。但在实际使用时,需要使用大量代码来手动处理生命周期和保持变量处于最新状态,且代码通用性和扩展性差。在使用时需要注册回调和在Activity状态更新时通知GPS。

2025-01-03 02:26:07 572

原创 JetPack——Lifecycle

Lifecycle 是一个类,用于存储有关组件(如 activity 或 fragment)的生命周期状态的信息,并允许其他对象观测此状态。

2024-12-31 17:42:03 937

原创 Android实例——全局修改dp/sp

假如文件命名为adjust_xml_values.py,则在命令行运行。可用于不同密度设备的适配,将xml文件放到指定目录,设置缩放因子。

2024-09-03 09:17:26 299

原创 Android高级——Logger日志系统

1是因为标签和内容后面跟着’\0’,用来区分和解析。

2024-07-11 15:08:02 2396

原创 Android高级——智能指针

智能指针是一种能够自动维护对象引用计数的技术Android系统提供了三种类型的C++智能指针。

2024-07-04 16:35:20 1253

原创 Kotlin基础——异步和并发

故同步不是阻塞,同步也可以是非阻塞的,如在执行同步代码块时,线程可以不阻塞而是一直在后台运行但多线程只是看上去同时执行,底层原理是通过CPU调度来实现的,当一个线程切换到另一个线程时,通常需要切换线程也是需要开销的,故当线程切换很频繁时,可能会导致多线程并不优于单线程。

2024-06-28 19:12:14 835

原创 Kotlin基础——Typeclass

如在Iterable新增泛型方法时对应的List、Set实现上述方法时仍需要返回具体的类型使用高阶类型可以解决上述问题,,Kotlin可以通过扩展实现高阶类型(下面例子都是根据这个来实现)

2024-06-22 17:45:45 800

原创 Kotlin基础——优化设计模式

使用Kotlin优化Java的设计模式写法。

2024-06-18 19:41:16 627

原创 Android中级——设置默认Launcher(Android13)

ResolverActivity解析隐式Intent,其onCreate()方法如下调用ResolverActivity的5参数onCreate()方法,如下调用ResolverActivity的 configureContentView() 方法,如下调用AbstractMultiProfilePagerAdapter的 rebuildActiveTab()、rebuildTab() 方法,如下调用ResolverListAdapter的 rebuildList() 方法,如下。

2024-05-27 14:30:49 1551

原创 Kotlin基础——DSL

通过扩展函数实现获取一天前和一天后的日期。

2024-02-24 18:02:35 1359

原创 Kotlin基础——注解和反射

同Java一样,注解放到函数或类最前面@Deprecated可以提供实参,且通过ReplaceWith为IDEA提示正确的用法注解的参数类型为:基本数据类型、字符串、枚举、类引用、其他的注解类,以及他们的数组,但需要注意。

2024-02-23 10:40:02 1089

原创 Kotlin基础——泛型

编译器一般可以推导出类型实参若创建空的list,则需要显示指定类型实参,可以用如下两种方式。

2024-02-19 10:30:01 1393

原创 Kotlin基础——高阶函数和内联函数

高阶函数,其可用Lambda或函数引用表示。

2024-01-29 18:47:20 1150 1

原创 kotlin基础——重载

使用operator定义plus()方法后,可以直接使用+号求和若定义为扩展函数,也可实现可供选择的重载运算有如下,不会自动支持交换性不要求两个运算数是相同类型返回类型也可不同于任一运算数类型Kotlin中的位运算符如下。

2024-01-04 15:37:25 1493

原创 Android实例——AS问题记录

Gradle plugin和Gradle版本可在File——Project Structure中查看,需要保证上面的最低版本对应。修改build.gralde(app),将dependencies中的compile改为implementation。点击Gradle Settings,选择大于11的SDK(我选择的是17)将Jar复制到libs,然后右键选择Add As Library。上面报错关键为组件在JDK11编译,当前环境为Java8。点击File——Project Structure。

2024-01-02 18:15:53 1033

原创 Kotlin基础——类型系统

对于如下Java函数,可传递null或者值为null的String而在Kotlin中,如下函数不能传递null或值为null的String,否则会在编译期报错,保证了永远不会在运行时报空指针异常。

2023-11-29 17:28:51 985

原创 Kotlin基础——Lambda和函数式编程

使用 { } 定义Lamba,调用run运行更常用的为,还可以存储到变量中,把变量作为普通函数对待maxBy()接收一个Lambda,传递如下Lambda可使用函数参数和局部变量。

2023-11-24 10:49:38 989

原创 Kotlin基础——接口、类和object

接口中可以声明域,每个子类都要初始化接口中的域接口中也可以使用getter和setter,前提是不引用变量。

2023-11-11 19:25:06 601 1

原创 Kotlin基础——枚举、When、in、for

这也是Kotlin唯一必须使用分号的地方。

2023-10-28 14:51:09 1070

原创 Kotlin基础——变量、函数、字符串

转换后的代码如下,name为var变量(默认带有getter和setter),而age为val变量(只有getter)上面称为代码块函数体,当函数体由单个表达式构成时,可简化为表达式函数体(自动会推导出返回类型)Kotlin和Java一样是静态语言,所有表达式类型在编译期已经确定。只有数据没有其他代码的对象通常叫做值对象,如JavaBean。如果一个属性可以根据其他属性计算,可使用自定义getter。将上述Java复制到代码.kt文件,会触发自动转换(

2023-10-24 19:15:02 663

原创 Android实例——MVVM

Model-View-ViewMode架构,可看作MVP改进版,将此前Presenter的逻辑操作交给ViewMode中的Binder去处理。在build.gradle中android节点添加如下代码(最低SDK版本为API7,Gradle版本为1.5.0-alpha1)LoginModel封装维护LoginInfo、点击事件、文本改变事件。MainActivity开启线程3秒后修改数据会显示在UI。xml文件根节点变为layout,布局分为。创建数据实体类LoginInfo。

2023-10-19 20:51:05 417

空空如也

空空如也

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

TA关注的人

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