- 博客(38)
- 收藏
- 关注
原创 Dart 中的 getter 和 setter
getter用于返回对象的属性值,它通过get关键字定义。setter用于设置对象的属性值,它通过set关键字定义。getter 是只读的 setter 是只写的。
2025-01-05 21:05:44
367
原创 Dart 中的泛型
型变指的是在泛型类型参数之间的继承关系。它描述了如果一个类型A是另一个类型B的子类型,是否可以在泛型类中通过子类型替代父类型。直观地说,型变决定了你是否可以将子类类型赋给父类类型,特别是在泛型类中。型变有三种主要类型:协变、逆变和不变。接下来,我们有一个泛型类Crate<T>T item;假设我们想知道是否是的子类型。直觉可能会告诉你:“因为Orange是Fruit的子类,所以应该是的子类型”。但是,答案是 No,在 dart 语言中两者没有关系,Dart 语言中没有默认的协变或逆变关系,所以和。
2024-12-25 20:42:05
1039
原创 Dart 中的 Isolate
在 Dart 的线程中也存在事件循环和消息队列的概念,但在 Dart 中线程叫做isolate。应用程序启动后,开始执行 main 函数并运行。每个 isolate 包含一个事件循环以及两个事件队列,event loop事件循环,以及和microtask queue事件队列。event queue:负责处理I/O事件、绘制事件、手势事件、接收其他 isolate 消息等外部事件。microtask queue:可以自己向 isolate 内部添加事件,事件的优先级比 event queue高。
2024-12-21 15:59:37
904
原创 Dart 中的构造函数
传统构造函数:直接初始化成员变量,Dart 会自动生成,不写任何构造函数(包含其他种类构造函数)默认会有一个无参构造函数,一个类中只允许有一个。命名构造函数:可以定义多个构造函数,每个构造函数有不同的名字,用于提供不同的初始化逻辑。工厂构造函数:通过factory关键字定义,可以控制实例化过程,适合复杂的对象创建或返回缓存实例。重定向构造函数:将一个构造函数的调用重定向到另一个构造函数,减少代码重复。初始化列表:允许在构造函数体执行之前初始化字段,适用于复杂的初始化逻辑。常量构造函数。
2024-12-21 15:55:54
1185
原创 Android 中 compileSdkVersion 和 buildToolsVersion 以及targetSdkVersion minSdkVersion 的区别和作用
配置项作用说明编译时使用的 Android API 版本。用来编译应用并决定你可以访问的 Android API 级别。构建工具的版本,决定了使用的编译工具版本。负责 APK 构建过程的工具链,通常可以省略,由 Gradle 自动选择。应用优化的目标 Android API 版本。告诉系统应用优化的 Android 版本,决定应用如何适应新版本的 Android 行为变化。应用支持的最小 Android API 版本。决定应用可以在哪些版本的 Android 上安装和运行。和。
2024-12-18 16:16:35
1337
原创 Flutter中的Future和Stream
在 Dart 中,catchError和onError都可以用于处理异步操作中的错误。它们的主要区别在于用法和灵活性,选择哪一个取决于你的代码结构和需求。流中断:当流遇到异常时,流会进入错误状态并停止发出事件。异常处理:你可以通过onError回调或try-catch语句捕获和处理异常。恢复流:在流发生异常时,可以选择恢复流的工作,例如通过重新订阅流。特性FutureStream返回值只返回一个值或一个错误持续返回多个值或错误生命周期一次性操作,完成后不再有新的值持续发出多个值(或者是事件)
2024-11-29 17:58:21
1027
原创 Flutter 之 InheritedWidget
主要用于将数据从父组件传递到子组件,子组件无法直接修改父组件的状态。回调函数和状态提升:是从子组件向父组件传递数据或修改父组件状态的常用方法。是 Flutter 中处理跨层次数据共享的基础工具。它能有效避免 “prop drilling” 问题,使得子 Widget 可以轻松访问祖先 Widget 的数据。它常常用作状态管理的基础,并且在 Flutter 中的许多第三方库和框架(如Provider)中都有广泛应用。
2024-11-28 21:37:15
1242
原创 c++ 中虚函数和纯虚函数
虚函数:提供多态性,增强代码灵活性。适用于需要不同实现但使用相同接口的场景。纯虚函数:用于定义接口,强制派生类实现特定功能。适用于设计模式、框架开发和插件架构等需要接口的场景。(java 中的抽象函数)
2024-10-18 17:51:47
372
原创 c++ 中使用 new 创建的对象和不使用 new 创建对象的区别
在 C++ 中,使用new和不使用new创建对象的主要区别在于内存分配位置、生命周期管理、作用域以及性能开销。选择使用哪种方式取决于具体的应用场景和需求。在需要动态内存管理时使用new,而在可预见的短生命周期和固定大小的对象时,使用栈上分配会更简单和安全。
2024-10-18 16:43:42
843
原创 数组指针与指针数组的区别
数组指针: 是一个指向数组的指针,通常用于访问和操作整个数组。声明时需要指定数组的大小,如表示一个指向包含 3 个int元素的数组的指针。指针数组: 是一个数组,其中每个元素都是指向某种类型的指针。例如,表示一个包含 3 个int*类型元素的数组,每个元素都是一个指针。理解这两者的区别对于正确使用指针和数组是很重要的,它们在不同的编程场景中有不同的用途。
2024-08-10 17:20:51
380
1
原创 指针常量和常量指针的区别
指针常量:指针的指向不可以修改,但是指针指向的值可以修改 记:指针是常量常量指针:指针的指向可以修改,但指针指向的值不可以修改 记:常量的指针指向常量的常量指针:指针的指向以及指针指向的值都不可以修改。
2024-08-10 16:59:40
406
原创 JS中=、==、===的区别
3、如果被比较的两个值都是字符串,每个位置的字符都一样,那么相等;4、如果被比较的两个值都是布尔类型的true,或者都是false,那么相等。4、如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。6、如果两个值都是null,或者都是undefined,那么相等。2、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。1、如果一个是null、一个是undefined,那么相等。2、如果被比较的两个值都是数值,并且是同一个值,判定相等。1、如果被比较的两个值数据类型不相等则不等。
2024-08-02 10:34:01
416
原创 java 实现Comparable接口和实现Comparator接口排序的区别
这取决于Collections.sort()方法是否传入了自定义Comparator排序规则,如果传入了自定义Comparator排序规则那以Comparator为准否则以Comparable为准。
2024-07-10 22:22:07
1383
原创 uniapp vue3微信小程序如何获取dom元素
第一种方式在vue2中是可以获取到的,但是在vue3 setup中是没有this的(需要通过getCurrentInstance方法获取当前组件实例),所以这种方式排除。上面这种方式,只适合在非子组件的情况下使用,如果当前组件时作为子组件,需要通过下面的方式。这是为了更好地管理组件实例,确保组件在不同环境中的正确渲染和状态管理。第二种方式在阅览器端是可以获取到的,但是在小程序端是获取不到的,所以这种方式也排除。因为在 Vue 3 中,子组件实例不再直接暴露给全局或者父组件,而是需要通过。
2024-07-10 14:31:13
4580
4
原创 java中实现Callable方式创建线程
1、实现Callable的方式有返回值2、实现Callable的方式可以抛出异常3、实现Callable的方式可以通过FutureTask类中提供了一个cancel方法取消任务。
2024-06-22 19:09:48
909
原创 java继承Thead类和实现Runnable接口创建线程的区别
由于不同的线程对象,有不同的内存副本,导致count–只是操作当前线程对象中的count不会影响其他线程,从而导致无法共享变量。注意:开启子线程要调用start()方法而不是调用run方法。上面代码实现了count变量的共享,但要注意。
2024-06-22 15:58:25
347
原创 Android常见内存泄漏场景总结
*造成原因:**上面一和四其实也是多线程造成内存泄漏的场景,主要是子线程中持有外部类(例如Activity)的引用,让后子线程的生命周期又和Activity不同步,从而造成activity被销毁时子线程中的任务还在执行,从而导致activity的资源迟迟得不到回收造成内存泄漏。**解决办法:**不使用匿名内部类,并且使用static关键字修饰内部类(static修饰的内部类不持有外部类的引用,也自然不会造成上面的内存泄漏),如果内部类中需要使用外部类的资源,可以使用弱引用的方式持有外部类。
2024-06-04 18:30:24
1366
原创 Android ViewPager和ViewPager2的区别
不可以缓存,Fragment离开屏幕时,该适配器会销毁该Fragment并释放其资源,而在Fragment重新进入屏幕时,该适配器又会重新创建该Fragment。的预加载与离屏加载在view层面有着本质的区别,离屏加载的view已经添加到parent上,而预加载只是准备了布局,并没有加载到parent上。在遇到预加载时,只会创建Fragment对象,不会把Fragment真正的加入到布局中,所以自带懒加载效果;为1时,在第1页会加载2条数据,每滑动一页,都会加载下一页数据,直到第五页,会移除第一页数据。
2024-06-04 17:14:38
1364
原创 uni-app加载本地图片报500(Internal Server Error)异常解决办法
上面说在packageA/pages/static/images下没找到对应图片,可我明明用的是根目录下的static的图片啊。这个方法对我遇到的这种错误无效,于是我仔细看了一下所报的异常。
2024-05-27 17:58:42
927
1
原创 OpenCV下载安装教程(Windows)
OpenCV(Open Source Computer Vision Library)是一个广泛使用的开源计算机视觉库,旨在提供丰富的图像和视频处理功能。它最初由Intel于1999年开发,并演变成为一个全球性的开源项目,得到了众多开发者的贡献和支持。OpenCV可以通过C++、Python、Java等编程语言调用,使得开发者能够在不同平台上进行图像处理和计算机视觉应用程序的开发。作为一个全面且强大的计算机视觉库,OpenCV包含了数百个用于图像处理、特征检测、对象识别、视频分析等领域的函数和工具。
2024-04-20 10:16:25
35257
9
原创 Android invalidate、postInvalidate、requestLayout的区别
invalidate方法用于在UI线程中请求重绘视图。当我们希望在主线程中更新UI时,可以在UI线程中直接调用invalidate()方法。内部实现:调用了invalidate方法后,为该View添加一个标记位,同时不断向父容器请求刷新,父容器通过计算得出自身需要重绘的区域,直到传递到ViewRootImpl中,最终触发performTraversals方法,开始View树重绘流程(只绘制需要重绘的视图)
2024-03-29 21:53:36
1435
1
原创 Android冷启动优化
建议:一些三方的SDK,文件,设备,线程池,等等工具类不放在Application初始化,我们可以放到用到的地方才进行初始化操作。热启动是指应用程序在保留应用程序进程的情况下再次启动的启动方式,这种启动方式相对于冷启动要快得多,因为应用程序的许多资源和进程已经存在于系统内存中,不再需要重新创建和加载。**温启动:**温启动包含了冷启动的一些操作,由于app进程依然在,温启动只执行冷启动的第二阶段,这代表着它比热启动有更多的开销。2、推荐使用merge标签,可以减少一个层级。在manifest中使用。
2024-03-23 16:29:23
1416
1
原创 数据结构-堆
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆中某个节点的值必须大于等于或者小于等于子节点的值堆总是一棵完全二叉树。1大顶堆:结点的值大于等于子节点的值2小顶堆:结点的值小于等于子节点的值常见的堆有二叉堆、斐波那契堆等。
2024-03-10 11:31:40
1322
1
原创 针对哈希表的一些疑问
哈希表的内部是通过数组实现的,既然是数组就会有大小,当元素过多时就会导致数组大小不够承载这么多元素,就需要进行扩容,此外哈希表在存储大量元素时,可能会面临哈希冲突等问题,造成查找和插入操作的效率下降。聚集效应会导致哈希表的性能变得更差,因为它会增加哈希表查找和插入的时间,可能会降低哈希表的效率和吞吐量。链表的问题:链表在插入和删除元素时只需要调整相邻节点的指针,操作效率较高。总之,哈希表的扩容操作是一种优化哈希表性能的有效方法,需要综合考虑多方面因素,使用合适的算法和数据结构,并确保在线性时间内进行。
2024-03-09 10:00:53
1082
1
原创 单链表插入为什么比数组插入删除效率高?
单链表插入操作比数组插入操作更高效,主要是因为单链表的结构特点。单链表是由一系列节点组成的,每个节点包含了数据和指向下一个节点的指针。插入操作只需要修改相邻节点的指针就可以完成,而不需要像数组一样移动大量的元素。具体来说,使用数组进行插入操作需要将插入位置后面的所有元素往后移动一位,这种操作的时间复杂度是O(n)。而对于单链表,只需要修改待插入元素的前驱节点的指针,使其指向新插入的节点,新插入的节点的指针指向原来前驱节点的后继,这种操作的时间复杂度为O(1)。同时,单链表也比数组更适合进行删除操作。对于数组
2024-03-04 19:58:52
660
1
原创 Android ANR产生的原因以及解决方式
ANR是Android系统中的一种错误状态,全称为Application Not Responding,中文翻译为“应用无响应”。当Android系统检测到应用程序在一段时间内未能响应用户输入或无法执行主要的UI线程操作时,就会触发ANR错误。ANR是一种系统保护机制,旨在确保应用的响应性,防止用户在使用应用时遇到卡顿或无响应的情况。
2024-02-27 20:46:22
2778
原创 Android Service详解
Service是Android四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。Service的启动方式有两种:startService启动和bindService启动。Service是在main Thread中执行,Service中不能执行耗时操作(网络请求,拷贝数据库,大文件)。可以在xml中设置Service所在的进程,让Service在另外的进程中执行。Service执行的操作最多是20s,BroadcastReceiver是10s,Activity是5s。
2024-02-25 10:07:56
1168
原创 java多线程之sleep()、yield()、join()、wait()、notify()、notifyAll()、守护线程用法概率解析
上面三个方法都是Thread类提供的方法sleep()是一个静态方法,只能控制当前正在运行的线程休眠,而不能控制其他线程休眠,sleep方法有个参数用于控制线程的休眠时间,当休眠时间结束后线程就返回到就绪状态,而不是立即开始运行。sleep()会释放cpu资源,但是不会释放同步锁(类锁和对象锁)yield()方法是停止当前线程,让同等优先权的线程运行。如果没有同等优先权的线程,那么yield()方法将不会起作用。yield()方法不会阻塞该线程,它只是将线程状态转换为就绪状态,让系统重新调度一次。
2024-02-24 10:04:30
1250
1
原创 Http长链接、长轮询、连接复用等概率解析
Socket(套接字)是一种用于网络通信的编程接口,它提供了一组用于在不同计算机之间进行数据传输的方法和协议。Socket可以用于在客户端和服务器之间建立连接,并在连接上进行数据交换。通过Socket,不同计算机上的程序可以通过网络进行通信,实现数据的传输和交互。它可以在不同的网络层级上工作,如物理层、传输层和应用层。使用Socket进行网络通信通常涉及两个主要组件:服务器端和客户端。服务器端绑定一个特定的IP地址和端口号,并监听来自客户端的连接请求。客户端则发起连接请求,并与服务器建立连接。
2024-02-23 14:45:51
1629
原创 Android广播详解
在Android系统粘性广播一般用来确保重要的状态改变后的信息被持久保存,并且能随时广播给新的广播接收器,比如电源的改变,因为耗电需要一个过程,前一个过程必须提前得到,否则可能遇到下次刚好接收到的广播后系统自动关机了,随之而来的是kill行为,所以对某些未处理完的任务来说,后果很严重。如果想要接受这些广播,就需要使用广播接收器。顾名思义,一种有序的,同步的广播,它是按照次序来传递,先被优先级高的接收器接收到,响应完成后再传递给接收器B然后C,同时可以进行截断,比如在A处截断,后续B和C就无法接收到广播。
2024-02-22 14:24:13
4062
1
原创 Android Handler知识点大汇总
一、Message(消息)Message.class位于android.os.包中。Message的构造函数为无参构造方法,且只有一个构造方法;
2024-02-21 16:07:11
983
原创 Android intent传递数据和bundle传递数据有何区别
总的来说,Intent更适合在不同组件之间传递数据和激活组件,而Bundle更适合在Activity之间传递数据。Intent可以传递数据以外的信息,如Action、Category等,而Bundle只能传递数据。Android中,Intent和Bundle都可以用来在不同的组件之间传递数据,但它们有一些区别。Intent可以在不同的组件之间传递数据,而Bundle主要用于在Activity之间传递数据。Intent传递数据和Bundle传递数据是一回事,Intent传递时内部还是调用了Bundle。
2024-02-21 15:47:52
649
原创 史上最全Android代码混淆详解
optimizationpasses 5 # 代码混淆的压缩比例,值介于0-7,默认5-verbose # 混淆时记录日志-dontoptimize # 不优化输入的类文件-dontshrink # 关闭压缩-dontpreverify # 关闭预校验(作用于Java平台,Android不需要,去掉可加快混淆)-dontoptimize # 关闭代码优化-dontobfuscate # 关闭混淆-ignorewarnings # 忽略警告。
2024-02-21 15:44:42
7016
原创 Android apk反编译教程
assets:静态资源文件主要存放一些附件,例如,一些音频文件,其它的用户业务需求定义的配置文件等,可以以文件的方式被读取或访问。META-INF:签名文件所在的目录。Android apk文件只有在正式签名后,才可以发布到应用市场。res:即资源文件。程序写在开发时用到的字体,图片,布局文件等,都在这个目录中。AndroidManifest.xml:就是项目的配置文件。
2024-02-21 14:49:10
1986
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人