自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

彬_小彬的博客

一个想搞事情的攻城狮

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

原创 ServiceManager的启动和工作原理

ServiceManager 在 Android 系统中扮演了重要角色,通过管理和提供系统服务的注册和访问机制,为 Android 平台上的各种功能提供了基础支持。理解其启动和工作原理有助于深入理解 Android 系统中服务的管理和通信机制。

2024-07-24 13:49:49 695

原创 金融类应用数字运算的建议

遇到问题,精度丢失最近一年多的时间一直在做智能POS相关的应用,经常涉及到金额的运算.后台金额是按照元为单位保留两位小数的浮点类型,我在客户端接收的时候也是按照double类型保存的.后来在运算的时候发现了好多时候会出现精度丢失的情况.经过我研究最后总结了两个最佳实践.最佳实践1一句话,不用浮点类型.(long的取值范围为-9223372036854775808到922337203...

2018-04-28 13:49:53 546

原创 Kotlin/JS 新能优化

减少文件大小,使用代码分割和 Tree-shaking。优化 Kotlin 到 JavaScript 的转换,避免不必要的依赖和反射。合理使用 Kotlin 协程,避免不必要的协程和内存开销。减少频繁的 DOM 操作,使用虚拟 DOM 和批量更新。内存管理,防止内存泄漏,合理管理内存。优化异步性能,减少异步调用的开销,批处理异步任务。使用 WebAssembly,处理计算密集型任务。使用性能分析工具,定位性能瓶颈并有针对性地优化。

2024-12-24 16:33:17 351

原创 Kotlin/JS 的一些常见场景优化

使用js()高效的数据结构:如MapSetArray等。字符串和正则表达式操作:如RegExpStringDate等。异步和并发处理:如Promisefetch等。这些场景中的原生 JavaScript 类通常比 Kotlin 提供的标准库更为高效,尤其是在涉及性能瓶颈时。通过js()直接访问 JavaScript API,可以获得显著的性能提升,尤其是在 KMM 项目中需要跨平台实现时。

2024-12-24 11:31:17 712

原创 设计模式的六大原则

通过实践这些原则,开发者可以创建结构良好、易于维护和扩展的软件系统。每个原则在不同的设计模式中可能会有不同的实现方式,具体实现应根据具体情况和需求进行调整。在这个例子中,生成报告和打印报告被分成了两个类,符合单一职责原则。在这个例子中,打印和扫描功能被分成了两个独立的接口。类的实例来复用引擎的功能,而不是继承引擎类。在这个例子中,添加新形状时,只需扩展。类,而无需修改现有代码。

2024-07-31 20:43:25 369

原创 Kotlin扩展方法

扩展方法(Extension Methods)是指在不改变类定义的情况下,为现有类添加新的方法。在很多编程语言中,如 C#、Kotlin 和 Swift,扩展方法提供了一种简洁的方式来扩展类的功能,而无需继承或修改类。

2024-07-31 20:38:20 438

原创 Handler的引用链

在Android中,Handler的引用链最终由Android的消息机制(和Looper)来管理。理解这个引用链有助于理解Handler及其相关对象如何被引用和释放。

2024-07-31 20:35:52 453

原创 如何判断链表有环

快慢指针法是一种常见且高效的检测链表是否存在环的方法。它的基本思想是使用两个指针,一个快指针和一个慢指针,同时从链表头部出发,慢指针每次移动一步,快指针每次移动两步。如果链表中存在环,快指针最终会追上慢指针;如果没有环,快指针会在链表末尾处到达。哈希表法通过使用哈希表存储每个遍历过的节点。遍历链表时,如果遇到的节点已经存在于哈希表中,则表示链表存在环;如果遍历到链表末尾(在大多数情况下,快慢指针法更为优雅且效率高,推荐使用。

2024-07-31 20:26:58 445

原创 Flutter如何进行本地存储和缓存数据?

Flutter提供了多种本地存储和缓存数据的方式,适合不同的数据和使用场景。选择合适的方法取决。

2024-07-30 22:51:51 1105

原创 如何理解Flutter中的Widget、State、Context ,他们是为了解决什么问题?

Widget是Flutter应用的基本构建单元。它们描述了应用的UI和布局。每个Widget都是不可变的(immutable),表示应用界面的一部分。State是与StatefulWidget关联的对象,保存了Widget的可变状态。State对象包含了Widget的所有动态信息,负责在状态变化时重新构建UI。是Widget树中每个Widget的位置标识。它包含对父Widget、祖先Widget等的引用,提供了查找和访问Widget树中其他Widgets的信息。Widget:描述UI的不可变组件。

2024-07-30 22:43:06 963

原创 什么是Widget,Stateful Widget和Stateless Widget之间的区别?

和是Flutter中两种基本的Widget类型。选择使用哪种Widget取决于你的UI是否需要响应状态变化。如果UI是静态的,可以使用StatelessWidget;如果UI是动态的,需要根据用户输入或其他事件更新,可以使用StatefulWidget。

2024-07-30 22:37:15 439

原创 dart是值传递还是引用传递?

尽管Dart中的所有传递都是值传递,但对于对象和集合等可变数据类型,传递的是对象的引用的副本。因此,可以通过这些引用来修改原始对象的状态,这种行为在某些编程语言中被称为“引用传递”(pass-by-reference),但在Dart中,依然被称为值传递。

2024-07-30 22:29:55 490

原创 main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?

在Flutter中,main()和runApp()是应用的启动入口,分别扮演不同的角色。main()

2024-07-30 22:27:25 510

原创 什么是Flutter里的Key?有哪些分类有什么使用场景?

Key是Flutter中一个强大的特性,它在管理和优化Widget树时发挥了重要作用。正确使用Key可以帮助你构建高效、稳定和易维护的Flutter应用。

2024-07-30 22:18:32 566

原创 Flutter中如何处理异步操作

Flutter提供了多种方式来处理异步操作,包括Futureasyncawait和Stream。根据具体的场景选择合适的方式,可以使你的Flutter应用在处理异步数据时更加高效和简洁。

2024-07-29 22:21:10 502

原创 Flutter中的Streams

在 Flutter 中,Streams 是一种异步编程模型,用于处理异步数据流。Streams 可以看作是数据的管道,通过它你可以监听到数据的变化并作出相应的处理。它们在处理连续的数据事件(如用户输入、网络请求、实时数据更新等)时非常有用。的数据流并根据数据更新 UI。这种方式非常适合处理异步数据流和实时更新的场景。小部件一起使用,以便在构建 UI 时监听和响应数据变化。在 Flutter 中,Streams 常与。

2024-07-29 22:09:09 357

原创 解释Flutter的热重载功能

总结来说,Flutter的热重载功能大大提高了开发效率,使得开发者能够更快地迭代和调试应用,增强了开发体验。:注入的新代码会替换旧的代码,并保留应用的当前状态(如变量的值、UI状态等)。:热重载保留应用的当前状态,开发者可以在不丢失上下文的情况下进行调试和UI调整。:Flutter的热重载机制会将更改后的代码注入到正在运行的Dart虚拟机(Dart VM)中,而无需重新编译整个应用。:某些依赖环境的更改(如Gradle配置、iOS工程文件等),热重载无法处理,需要完全重新编译应用。键),即可触发热重载。

2024-07-29 21:55:59 607

原创 Data Binding简析

Data Binding 是 Android 提供的一种框架,用于将 UI 元素与应用的数据源绑定在一起,从而减少手动调用和手动更新 UI 的繁琐工作。Data Binding 可以直接在 XML 文件中声明绑定,从而让布局和逻辑更加分离。以下是 Data Binding 的工作原理及其基本使用方法。

2024-07-29 21:44:49 931

原创 LiveData简析

LiveData 是 Android 架构组件的一部分,用于持有和管理可观察的数据生命周期感知的数据容器。它的设计目的是在应用的 UI 和数据之间提供响应式的双向绑定,并在数据变化时通知观察者。以下是 LiveData 的工作原理及其基本使用方法。生命周期感知:LiveData 是生命周期感知型组件。它会自动管理订阅者(通常是 Activity 或 Fragment)的生命周期,确保只有在订阅者处于活动状态(STARTED 或 RESUMED)时才会通知数据变化。这可以防止内存泄漏和崩溃。观察者模式:Liv

2024-07-29 21:43:49 695

原创 Room简析

Room 是 Android 提供的一个持久性库,它在 SQLite 之上进行了一层抽象,使得与数据库的交互更加直观和简便。Room 提供了编译时的 SQL 查询验证,简化了数据库操作,并集成了 LiveData 和 RxJava,以实现响应式编程。以下是 Room 的工作原理及其基本使用方法。数据库抽象:Room 提供了一个抽象层,使开发者可以使用注解来定义数据库表、查询和关联,而无需编写大量的 SQL 代码。编译时验证:Room 在编译时会检查 SQL 查询的正确性,确保查询语句的合法性,并且在编译期生

2024-07-29 21:42:57 647

原创 WorkManager简析

创建一个继承自。

2024-07-28 19:28:38 778

原创 Navigation简析

Android Navigation 是 Jetpack 组件的一部分,提供了用于管理应用内导航的框架。它简化了应用内的导航操作,包括片段间的切换、参数传递和返回栈管理。以下是 Android Navigation 的工作原理及其基本使用方法。

2024-07-28 19:28:13 2923

原创 Android中如何正确的使用动态代理

首先,定义一个接口,这是动态代理所必须的。动态代理在 Android 开发中具有重要意义,可以帮助开发者实现更灵活的代码设计,支持 AOP 和权限管理等功能。在使用动态代理时,需注意性能开销和线程安全问题。通过合理设计和使用动态代理,可以大大提高代码的可维护性和复用性。

2024-07-28 19:17:28 642

原创 Android BlockCanary的使用和原理

可以覆盖中的upload方法,自定义报告的上传逻辑,将报告上传到服务器进行集中管理和分析。@Override// 自定义上传逻辑,例如上传到服务器是一个非常有用的工具,可以帮助开发者检测和分析应用中的卡顿问题。通过集成,开发者可以实时监控主线程的执行状态,生成详细的卡顿报告,从而优化应用的性能,提高用户体验。在实际应用中,可以根据需要自定义配置、调整监控频率和卡顿阈值,以及实现报告的自动上传,进一步提升性能监控和问题定位的效率。

2024-07-28 19:14:22 1039

原创 Android WatchDog简使用与原理

Watchdog是 Android 系统中的一个重要机制,用于监控关键线程的运行状态并检测卡顿或无响应情况。通过定期检查线程状态,Watchdog可以生成 ANR 报告,帮助开发者识别和解决性能问题。了解和实现Watchdog的机制,可以提高应用的稳定性和响应速度。

2024-07-28 19:12:58 666

原创 怎么检查线程有耗时任务

通过使用StrictMode、Android Profiler、Systrace、线程转储、自定义工具以及分析 ANR 报告,可以有效地检查和识别线程中的耗时任务。这些工具和方法可以帮助开发者优化应用性能,确保用户界面的流畅和响应性。

2024-07-28 19:10:48 551

原创 Android中ThreadLocal的实现原理是怎样的

的实现原理主要依赖于,它使用对象作为键,并通过弱引用来避免内存泄漏。每个线程都有自己的实例,确保线程局部变量的隔离。提供了线程安全的方式来管理每个线程的独立数据,避免了线程间的同步问题。

2024-07-28 19:09:09 410

原创 Android中ThreadLocal的使用方式是怎样的

在 Android 中使用时,通常用于在多线程环境中管理线程局部的数据。提供了一种简单且高效的方式来确保每个线程有自己的数据副本,避免线程间数据干扰和同步问题。正确使用可以帮助提高应用程序的性能和稳定性,但也需注意内存管理,确保在不需要时清除的值。

2024-07-28 19:07:11 341

原创 Android中ThreadLocal适用于什么场景

在 Android 中,适用于需要在同一线程的多个操作之间共享数据,同时避免线程间数据干扰的场景。

2024-07-28 19:06:03 372

原创 Android中ThreadLocal适用于什么场景

在 Android 中,适用于需要在同一线程的多个操作之间共享数据,同时避免线程间数据干扰的场景。

2024-07-28 19:05:24 363

原创 Android中ThreadLocal的原理

是 Android 和 Java 中的一种机制,用于在同一线程的多个操作之间存储和获取线程专属的数据。每个线程都有自己的局部变量副本,其他线程无法访问或修改这些变量。这对于需要在同一线程中保持独立状态的场景非常有用,如数据库连接或用户会话信息。

2024-07-28 19:04:10 380

原创 利用putBinder实现跨进程传输大图片

首先,创建一个 AIDL 接口,用于定义获取Bitmap的方法。在你的应用模块中创建一个新的 AIDL 文件(例如Bitmap;通过以上步骤,你可以使用putBinder方法在Bundle中传递一个实现了IBinder接口的对象,从而实现跨进程传输Bitmap对象。这种方法利用AIDL和Binder机制,使得在不同进程之间传递数据变得更加高效和灵活。确保在服务和客户端之间正确处理资源,以避免内存泄漏或其他资源管理问题。

2024-07-28 19:02:45 238

原创 Bundle中putParcelable和putBinder

在 Android 中,Bundle类提供了一种灵活的方法来存储和传递各种类型的数据。和putBinder是Bundle类中常用的方法,用于存储和传递不同类型的数据对象。

2024-07-28 19:00:15 447

原创 Intent如何图片传输限制(TransactionTooLargeException )

通过Intent传递数据时,Android 平台对传输的数据大小有严格限制,通常限制在 1MB 左右。如果尝试传递过大的数据(例如大图片),可能会导致异常。因此,不建议直接通过Intent的 extras 传递大图片。

2024-07-28 18:51:27 394

原创 Android 怎么跨进程传递大图片

在Android中跨进程传递大图片是一项具有挑战性的任务,因为Binder传输数据的限制。

2024-07-28 18:47:09 338

原创 Paging简析

创建一个继承自 PagingSource 的类,重写。

2024-07-27 21:57:47 1146

原创 ViewModel SavedState简析

ViewModel SavedState 是 Jetpack ViewModel 组件的一部分,它允许 ViewModel 保存和恢复状态数据,即使在设备配置更改(如屏幕旋转)或进程被系统回收后重新创建时,也能保留和恢复 ViewModel 的状态。以下是 ViewModel SavedState 的工作原理及其基本使用方法。

2024-07-27 21:57:02 1003

原创 Hilt简析

Hilt 是 Android Jetpack 的一个依赖注入(Dependency Injection)库,旨在简化 Dagger 的使用,特别是为了在 Android 应用中更轻松地使用依赖注入。以下是 Hilt 的工作原理及其基本使用方法。

2024-07-27 21:56:14 763

原创 Android 中的onTrimMemory

Override// 根据 level 处理内存优化逻辑。

2024-07-27 21:54:22 1549

原创 Jetpack 的 App Startup

App Startup 是 Jetpack 库的一部分,旨在为应用提供一个统一的、简单的初始化框架。使用这个库,开发者可以轻松地定义和管理启动时的初始化任务,并确保这些任务按照正确的顺序执行。

2024-07-27 21:51:59 1042

空空如也

空空如也

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

TA关注的人

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