- 博客(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中的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
原创 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
原创 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
原创 Jetpack 的 App Startup
App Startup 是 Jetpack 库的一部分,旨在为应用提供一个统一的、简单的初始化框架。使用这个库,开发者可以轻松地定义和管理启动时的初始化任务,并确保这些任务按照正确的顺序执行。
2024-07-27 21:51:59
1042
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人