- 博客(243)
- 收藏
- 关注
原创 Flutter ListView滑动
在Flutter中,ScrollController可以精确地控制和管理滚动行为。通过ScrollController,可以监听滚动的位置、速度,甚至可以在用户滚动时触发自定义的动作。此外,ScrollController还提供了对滚动位置的直接控制,可以编程地滚动到特定位置。
2024-08-25 16:38:39
415
原创 Flutter ListView 实现不同样式 item
我们在实际开发中会创建显示不同类型内容的列表。以下是使用 Flutter 创建此类结构的方法:1. 创建包含不同类型项目的数据源。2. 将数据源转换为小部件列表。
2024-08-24 16:54:56
253
原创 Android 14适配
最近刚刚做了Android 14的适配(即targetSdkVersion 升级到 34 ),通过此博客整理下相关注意点。
2024-08-22 10:20:57
1087
原创 Android 应用启动时间统计方式
TTID 指标用于测量应用生成第一帧所用的时间,包括进程初始化(如果是冷启动)、activity 创建(如果是冷启动/温启动)以及显示第一帧。在 Android 4.4(API 级别 19)及更高版本中,Logcat 提供了一个 Displayed 值,用于测量从启动进程到完成在屏幕上绘制 activity 的第一帧之间经过的时间。在 Android 4.4(API 级别 19)及更高版本中,Logcat 包含一个输出行,该行包含名为Displayed的值。
2023-03-26 15:42:15
2892
原创 State 生命周期-笔记
这些特定的阶段,就涵盖了一个组件从加载到卸载的全过程,即生命周期。这样的需求,在原生开发中,我们可以通过重写 Activity、ViewController 生命周期回调方法,或是注册应用程序的相关通知,来监听 App 的生命周期并做相应的处理。对于开发者来说,无论是普通 Widget(的 State)还是 App,框架都给我们提供了生命周期的回调,可以让我们选择恰当的时机,做正确的事儿。视图的生命周期,定义了视图的加载到构建的全过程,其回调机制能够确保我们可以根据视图的状态选择合适的时机做恰当的事情。
2023-03-12 14:56:41
400
原创 WebView白屏优化的一些整理
1.H5页面运行在独立进程中,H5打开需要首先启动Web进程。2.每次关闭H5页面会通过exitProcess(0)关闭Web 进程。
2023-03-12 12:09:11
1256
原创 Android应用启动优化笔记整理
应用启动相关流程与优化。应用启动主要涉及SystemServer进程 和 app进程。SystemServer进程负责app进程创建和管理、窗口的创建和管理(StartingWindow 和 AppWindow)、应用的启动流程调度等。App进程被创建后,进行一系列进程初始化、组件初始化(Activity、Service、ContentProvider、Broadcast)、主页面的构建、View加载。
2023-03-05 15:50:52
550
原创 Widget中的State-学习笔记
Widget 有 StatelessWidget 和 StatefulWidget 两种类型。StatefulWidget 应对有交互、需要动态变化视觉效果的场景,而 StatelessWidget 则用于处理静态的、无状态的视图展示。StatefulWidget 的场景已经完全覆盖了 StatelessWidget,因此我们在构建界面时,往往会大量使用 StatefulWidget 来处理静态的视图展示需求,看起来似乎也没什么问题。
2023-02-26 16:17:15
704
原创 Flutter for Android
将 Flutter 添加到现有应用程序在 Flutter 中一次重写整个应用程序是不切实际的。对于这些情况,Flutter 可以作为库或模块逐步集成到您现有的应用程序中。然后可以将该模块导入到您的 Android 或 iOS(当前支持的平台)应用程序中,以在 Flutter 中呈现应用程序 UI 的一部分。或者,只是为了运行共享的 Dart 逻辑。添加到应用程序功能支持集成任何屏幕尺寸的多个实例。
2023-02-16 16:26:30
2289
原创 Dart语法基础补充
Dart 库中充满了返回 Future 或 Stream 对象的函数。这些函数是异步的:它们在设置一个可能耗时的操作(例如 I/O)后返回,而不等待该操作完成。async 和 await 关键字支持异步编程,让编写看起来类似于同步代码的异步代码。
2023-02-12 16:38:55
480
原创 Dart语法学习-函数、类与运算符 学习笔记
Dart 是面向对象的语言,每个对象都是一个类的实例,都继承自顶层类型 Object。在 Dart 中,实例变量与实例方法、类变量与类方法的声明与 Java 类似。Dart 中并没有 public、protected、private 这些关键字,我们只要在声明变量与方法时,在前面加上“_”即可作为 private 方法使用。如果不加“_”,则默认为 public。不过,“_”的限制范围并不是类访问级别的,而是库访问级别。num?x, y;
2023-02-03 14:43:39
527
原创 Dart语法学习-数据类型
Numbers (int, double)Strings (String)Booleans (bool)Lists (List, also known as arrays)Sets (Set)Maps (Map)
2023-02-01 16:42:18
1046
原创 Android动态运行时权限
android 6.0(API 级别 23)开始,android引入了运行时权限,应用安装时不向其授予权限,应用运行时向其授予权限。如果在运行时该功能没有动态地申请相应的权限,就会抛出SecurityException异常。android的运行时权限的申请过程主要有两步:1、在需要申请权限的地方检查该权限是否被授权,如果已经授权就直接执行,如果未授权就动态申请权限。
2023-01-05 17:06:23
2515
原创 Android13适配
1.WebChromeClient的 API onReachedMaxAppCacheSize 没了2.WebSettings的setAppCacheEnabled(true) 没了WebView调整:废弃setAppCacheEnabled与setForceDark方法;(若设置 targetSdk>=33 则此项必需适配!)修改为。
2023-01-04 11:35:53
3056
原创 20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。3.每个右括号都有一个对应的相同类型的左括号。1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。
2022-12-23 09:59:34
82
原创 141. 环形链表
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。给你一个链表的头节点 head ,判断链表中是否有环。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。
2022-12-22 10:10:36
98
原创 Android MAT的使用
Java 8 和Java 11都有的情况下,把Java 11放到Java 8前面,这样Java环境才是11。最后Java -version 验证一下。由于最新版的MAT还需要JAVA 11,所以还需要配置JAVA 11的环境。
2022-12-21 20:45:54
851
原创 Kotlin协程笔记:CoroutineScope管理协程
CoroutineScope 是实现协程结构化并发的关键。使用 CoroutineScope,可以批量管理同一个作用域下面所有的协程。
2022-12-21 19:03:54
4429
原创 TraceView使用
TraceView 是 Android SDK 中内置的一个工具,用于加载 trace 文件,用图形的形式展示代码的执行时间、调用次数及调用栈,便于我们分析。
2022-12-20 17:16:34
999
原创 kotlin协程笔记:Dispatchers
Kotlin 的 launch 会调用 startCoroutineCancellable(),接着又会调用 createCoroutineUnintercepted(),最终会调用编译器帮我们生成 SuspendLambda 实现类当中的 create() 方法。协程无法脱离线程运行,Kotlin 当中所有的协程,最终都是运行在线程之上的。协程创建出来以后,如何与线程产生关联的?
2022-12-19 20:24:25
684
原创 Kotlin协程 - launch原理 笔记
launch、async 可以创建、启动新的协程,那么协程到底是如何创建的?runBlocking{} 启动了第一个协程,launch{} 启动了第二个协程。
2022-11-19 18:03:11
1967
原创 基础知识笔记:协程基础元素
Kotlin 协程的基础元素:Continuation、SafeContinuation、CoroutineContext、CombinedContext、CancellationException、intrinsics。CombinedContext是 CoroutineContext 的一个实现类, SafeContinuation是 Continuation 的实现类。
2022-11-12 21:51:04
984
原创 Kotlin挂起函数基础
挂起函数,比普通的函数多了 suspend 关键字。通过suspend 关键字,Kotlin 编译器就会特殊对待这个函数,将其转换成一个带有 Callback 的函数,这里的 Callback 就是 Continuation 接口。例PS 转换过程中,函数的类型发生了变化:suspend ()->Any 变成了 (Continuation)-> Any?。
2022-11-06 16:24:10
1311
原创 Kotlin协程-try-catch基础
在 Kotlin 协程当中,我们通常把异常分为两大类,一类是取消异常(CancellationException),另一类是其他异常。在 Kotlin 协程当中,这两种异常的处理方式是不一样的。
2022-11-05 19:25:21
2507
原创 Kotlin协程-并发处理-基础
Kotlin协程是基于线程执行的。经过一层封装以后,Kotlin协程面对并发,处理方式与Java不同。在java的世界里,并发往往是多个线程一起工作,存在共享的变量。需要处理好同步问题。要避免把协程与线程的概念混淆。上述代码中没有任何并发任务,launch创建了一个协程,所有的计算都发生在协程中。所以不需要考虑同步问题。
2022-10-30 14:11:46
3571
原创 Kotlin协程-select基础
select——>用于选择更快的结果。基于场景理解比如客户端要查询一个商品的详情。两个服务:缓存服务,速度快但信息可能是旧的;网络服务,速度慢但信息一定是最新的。上述程序分为四步:第一步:查询缓存信息;第二步:缓存服务返回信息,更新 UI;第三步:查询网络服务;第四步:网络服务返回信息,更新 UI。用户可以第一时间看到商品的信息,虽然它暂时会展示旧的信息,但由于我们同时查询了网络服务,旧缓存信息也马上会被替代成新的信息。但是可能存在一些问题:如果程序卡在了缓存服务,获取网络服务就会无法执行。
2022-10-29 12:38:19
1201
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人