- 博客(84)
- 资源 (4)
- 收藏
- 关注
原创 通俗易懂的JVM详解
1、运行流程java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行2、JVM基本结构从这个结构不难看出,class文件被jvm装载以后,经过jvm的内存空间调配,最终是由执行引擎完成class文件的执行3、内存空间方法区:所有线程共享,里面存有常量池、静态变量、类信息Java堆:所有线程共享,里面存有该虚拟机的所有对象/实例,可以想象你的一个系统会产生很多实例,因此ja
2021-05-31 17:54:58
391
3
原创 通俗易懂的Glide详解
Glide.with(this).load("").into(view)1、整个流程详解1)首先,Glide.with(activity)方法得到RequestManager类,这个类的主要作用是将glide 与 整个组件的生命周期绑定在一起。(它实现了LifecycleListener接口,这是一个与Context的生命周期绑定的接口,将request与生命周期绑定,这样就可以通过context的生命周期去操作网络请求的开始,暂停等。)如何绑定的??答:在Activity上创建一个透明无界面的Re
2021-05-29 11:12:07
1127
原创 通俗易懂的Rxjava详解
基本使用主要分三步:1、创建被观察者。【Observable.create()】2、创建观察者。【new Observer()】3、被观察者订阅观察者【Observable.subscribe(Observer)】
2020-10-13 16:18:53
2743
原创 通俗易懂的Retrofit详解
Retrofit主要是利用动态代理的方式,获取其执行时的方法上的注解+形参等数据,并保存于serviceMethod对象中。serviceMethod和args(形参的值)全都存入OkHttpCall中,serviceMethod.adapt最终返回的是将serviceMethod和okHttpCall绑在了一起。调用Call/Observable的enqueue()—>OkHttpCall的enqueue()—>okhttp的enqueue()。得到数据回调对应的方法中interface x
2020-10-12 17:41:58
2987
原创 通俗易懂的自定义view详解
原文:https://blog.csdn.net/guolin_blog/article/details/16330267自定义View的分类1、继承View当我们需要实现的效果是一个不规则效果的时候,那么这时就需要继承 View 来实现了,我们需要重写 onDraw 方法,在该方法里实现各种不规则的图形和效果。当我们使用这种方式的时候,需要自己去处理 warp_content 和 padding。@Override protected void onMeasure(int widthMea
2020-10-10 15:48:39
969
1
原创 通俗易懂的handler原理解析
先来说一下流程1、ActivityThread中通过Looper.prepareMainLooper() 创建looper对象1)在Looper.prepareMainLooper() 方法中,如果有Looper实例会报错,所以一个线程中只能有一个Looper实例2)在Looper.java类中直接创建sThreadLocal,ThreadLocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据3)通过下图也可以看出ThreadLocal也是只能有一
2020-09-29 18:02:48
646
原创 android面试2021
android面试2019activityactivity生命周期activity四种启动模式activity启动流程fragmentfragment作用fragment生命周期功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不...
2019-09-17 18:07:22
3366
2
原创 Kotlin 全方向开发技术栈指南
实现与 Swift/Objective-C 的互操作。编译为机器码,无需 JVM,支持嵌入式设备。KMP 编译为 iOS 原生二进制,通过。之间共享代码,同时保持原生性能 [
2026-04-07 15:45:42
460
原创 通俗易懂的 TensorFlow 和 Transformers
是由 Google 开发的一个开源机器学习框架,是一个功能全面的深度学习框架,不仅支持 NLP,还支持图像、语音等任务,适用于各种机器学习任务的。:是一个专门为自然语言处理(NLP)任务设计的库,提供了大量的预训练 Transformer 模型,可以帮助开发者快速进行文本处理和分析任务。:在移动端加载.tflite模型文件就可以在本地使用模型了,TensorFlow 官方提供了。其中包含了多个常见的预训练模型,适用于不同的设备和场景。模型量化:支持模型的量化技术,降低内存占用和计算需求,同时保证准确性。
2026-01-29 15:07:37
360
原创 StateFlow、SharedFlow、ChannelFlow和普通的flow{...}区别
【代码】StateFlow、SharedFlow和普通的flow{...}区别。
2025-12-17 15:29:33
539
原创 Kotlin保留小数位的三种方法
如果需要更灵活的格式化(如指定千位分隔符或自定义模式),可以使用 Java 标准库中的。这是最简单的方式,直接利用 Kotlin 的字符串模板或。类(Kotlin 兼容 Java)。表示要保留的小数位数(例如,
2025-10-29 16:06:27
652
原创 Kotlin基础类型扩展函数使用指南
数字类型的扩展函数主要用于数值转换、范围约束和条件检查。String 类型的扩展函数非常丰富,用于字符串操作、转换和检查。:将字符转换为大写形式。如果字符无大写形式,则返回原字符。:将字符转换为小写形式。如果字符无小写形式,则返回原字符。:检查字符串是否为空或只包含空白字符(如空格、制表符)。Char 类型的扩展函数用于字符转换、分类和检查。:检查字符是否为字母(a-z, A-Z)。:将字符串的首字母小写,其余字母保持不变。:将字符串的首字母大写,其余字母小写。:检查字符是否为数字(0-9)。
2025-10-29 15:55:59
407
原创 Kotlin数据结构性能全解析
数据结构随机访问插入/删除内存开销适用场景ArrayListO1O(1)O1OnO(n)On低高频访问,少修改HashSetO1O(1)O1O1O(1)O1中快速去重HashMapO1O(1)O1O1O(1)O1中键值查询ArrayO1O(1)O1不支持最低固定大小数据SequenceOnO(n)On不支持极低大数据流处理设计原则优先选择不可变集合(线程安全)高频修改用Mutable变体大数据操作用。
2025-10-29 15:45:00
541
原创 Kotlin List扩展函数使用指南
:转换每个元素:过滤元素:遍历元素:检查是否存在元素满足条件:检查所有元素满足条件:查找第一个满足条件的元素 和 :获取首尾元素 和 :聚合操作:分组元素其他常用函数:Kotlin 的 (如 )也有类似扩展函数,但存在关键差异,因为 是键值对集合,而 是索引序列。以下是主要异同点:
2025-10-29 15:25:12
918
原创 Android存储目录全解析
Android开发中,Environment类提供了访问设备存储目录的方法,包括内部存储(/data)、系统分区(/system)和外部存储(/storage)。存储分为内部存储(应用私有)和外部存储(可共享),后者包括公共目录(Downloads等)和私有目录(卸载清除)。从Android10开始推荐使用ScopedStorage机制,通过Context类方法访问外部存储私有目录。权限方面需声明READ/WRITE_EXTERNAL_STORAGE,并在操作前检查存储状态。
2025-10-29 11:12:47
620
原创 android 主题都表示什么意思
Theme.AppCompatTheme.AppCompat 是一个兼容性主题,用于确保应用在不同版本的 Android 系统上都能保持一致的外观和行为。它提供了 Material Design 的样式,并且兼容 Android 2.1(API 级别 7)及以上版本。Theme.AppCompat:基本的 AppCompat 主题,提供 Material Design 的默认样式。Theme.AppCompat.Light:浅色背景的 AppCompat 主题。Theme.AppCompat.Da
2025-01-14 14:38:04
928
原创 DRouter与ARouter的区别
通过Apt技术生成路由表。Apt(Annotation Processing Tool)在编译阶段扫描代码中的注解,生成保存路径(路由path)和被注解的组件类的映射关系的类。在运行时通过这些信息找到目标组件并进行跳转。这种设计使得模块间可以互不依赖,实现独立的模块化跳转通过Gradle插件在编译期动态生成路由表。DRouter的插件在编译期间启动多线程异步处理所有组件,支持增量扫描功能,仅对修改过的代码进行处理,极大地缩短了路由表生成的时间。框架初始化时使用子线程加载路由表,不阻塞主线程,提高了效率。通
2024-10-14 16:38:34
426
原创 搞懂OpenGL、OpenGL ES、OpenVG、OpenCV的用处
是一个跨编程语言、跨平台的编程接口的规格,它用于生成二维、三维图像, 主要用于电脑应用、网站中。
2024-07-01 12:06:58
893
原创 完美解决低版本android系统Textview因全半角特殊符号,导致异常换行的问题
/onDraw可能会被多次调用,因此不是每次调用都需要重绘,这里做了个判断,text是否跟上一次一样,若一样,不再计算,否则重新计算赋值。调整TextView显示文本,因全半角特殊符号,导致异常换行的问题的控件。
2023-12-07 16:22:10
703
原创 Surfaceview+MediaPlayer存在黑边框问题
SurfaceView的大概原理就是在现有View的位置上创建一个新的Window,内容的显示和渲染都在新的Window中。但是呢,由于SurfaceView的内容没有显示在View中而是显示在新建的Window中, 使得SurfaceView的显示不受View的属性控制,不能进行平移,缩放等变换,也不能放在其它RecyclerView或ScrollView中,一些View中的特性也无法使用。它是将内容流直接投放到View中,并且可以和其它普通View一样进行移动,旋转,缩放,动画等变化。
2022-11-18 15:20:55
833
原创 flutter常用到的终端指令
flutter-web局域网内调试:flutter run -d chrome --web-hostname 192.168.20.24 --web-port 8088 --no-sound-null-safetyflutter-web打包指定渲染器:flutter build web --web-renderer html --no-sound-null-safety持续更新。。。
2022-01-04 10:24:05
1349
原创 flutter web实现微信网页授权登录
1、首先我使用了Getx来管理路由和获得用户同意登录后的codevoid main() { runApp(const MyApp());}class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context){ HttpUtil.getInstance(); return GetMat
2021-12-29 09:40:35
4175
4
原创 解决livedata的粘性事件
MyMutableLiveData 继承 MutableLiveDataclass MyMutableLiveData : MutableLiveData<Any>() { open inner class WrapperObserver(private val stick : Boolean = false, //是否是粘性观察,是的话会收到订阅之前的消息 private val observer : Observer<Any>) : Observer<An
2021-12-11 15:55:15
2134
原创 解决scrollview+刷新控件+recyclerview滑动冲突
//阻止子view获得焦点//在刷新控件里加上该属性即可android:descendantFocusability="blocksDescendants"
2021-12-08 15:35:07
218
原创 解决打开新页面EditView自动获取焦点,软件盘没有弹出
class SearchActivity : BaseActivity, ViewTreeObserver.OnGlobalLayoutListener { override fun initView() { super.initView() //布局的状态发生变化或者可见性发生变化才会调用 mBinding.etContent.viewTreeObserver.addOnGlobalLayoutListener(this) } overrid
2021-11-25 15:10:14
520
原创 android无障碍整体编写
准备:一、打开monitor.bat 我的在 D:\androidSDK\tools\monitor.bat 如果打开报错方法一:进入D:\androidSDK\tools\lib\monitor-x86_64 打开monitor.exe方法二:任务管理器(ctrl+alt+delete)结束 monitor.bat 程序,删除 monitor-x86_64 下所有文件,再重新打开二、如果想看当前页面的类名使用adb命令adb shell dumpsys window | findstr
2021-11-25 15:01:44
2210
原创 android组件化单独运行
1、在 gradle.properties 中加上 isModule=true2、在对应的 build.gradle 中加上if(isModule.toBoolean()){ //表示可单独运行 apply plugin: 'com.android.application'}else{ //表示该module是个library,不可单独运行 apply plugin: 'com.android.library'}3、在对应的 build.gradle 中的android{
2021-11-09 17:29:19
1824
原创 android定位到市
<!--定位权限--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>// 请求结果,返回一个map ,其中 key 为权限名称,value 为是否权限是否赋予registerForActivityRe
2021-11-09 17:18:47
1941
原创 python-selenium配置环境变量+使用
1、安装seleniumpip install selenium2、下载浏览器驱动Chrome/Firefox要先查看当前浏览器版本是多少:设置->帮助->关于chrome即可查看版本然后点击浏览器驱动中心https://npm.taobao.org/mirrors/chromedriver找到对应的版本驱动进行下载3、配置环境变量我的电脑属性->高级系统设置->环境变量,在系统变量中找到Path点进去进行配置驱动在哪个路径下就把对应的路径配置上,最好不要放在有中文的
2021-08-02 09:48:04
2967
原创 python简单爬虫代码
业务需求:给到一个Excel文件里面有店铺名称,在酒仙网搜索店铺,查看是否关店和商品是否下架# -*- coding: UTF-8 -*-import requestsfrom tkinter import *from tkinter import filedialog, messagebox, ttkimport xlrdimport xlwtfrom bs4 import BeautifulSoupfrom concurrent.futures import ThreadPoolEx
2021-07-27 17:04:55
2838
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅