自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(239)
  • 收藏
  • 关注

原创 Android 14适配

Android 14适配。

2023-07-15 15:22:53 3422

原创 Android 架构设计学习

应用架构定义了应用的各个部分之间的界限以及每个部分应承担的职责。所以应当按照某些特定原则设计应用架构。

2023-04-16 14:38:00 442 1

原创 Android 应用启动时间统计方式

TTID 指标用于测量应用生成第一帧所用的时间,包括进程初始化(如果是冷启动)、activity 创建(如果是冷启动/温启动)以及显示第一帧。在 Android 4.4(API 级别 19)及更高版本中,Logcat 提供了一个 Displayed 值,用于测量从启动进程到完成在屏幕上绘制 activity 的第一帧之间经过的时间。在 Android 4.4(API 级别 19)及更高版本中,Logcat 包含一个输出行,该行包含名为Displayed的值。

2023-03-26 15:42:15 2278

原创 State 生命周期-笔记

这些特定的阶段,就涵盖了一个组件从加载到卸载的全过程,即生命周期。这样的需求,在原生开发中,我们可以通过重写 Activity、ViewController 生命周期回调方法,或是注册应用程序的相关通知,来监听 App 的生命周期并做相应的处理。对于开发者来说,无论是普通 Widget(的 State)还是 App,框架都给我们提供了生命周期的回调,可以让我们选择恰当的时机,做正确的事儿。视图的生命周期,定义了视图的加载到构建的全过程,其回调机制能够确保我们可以根据视图的状态选择合适的时机做恰当的事情。

2023-03-12 14:56:41 356

原创 WebView白屏优化的一些整理

1.H5页面运行在独立进程中,H5打开需要首先启动Web进程。2.每次关闭H5页面会通过exitProcess(0)关闭Web 进程。

2023-03-12 12:09:11 951

原创 Android应用启动优化笔记整理

应用启动相关流程与优化。应用启动主要涉及SystemServer进程 和 app进程。SystemServer进程负责app进程创建和管理、窗口的创建和管理(StartingWindow 和 AppWindow)、应用的启动流程调度等。App进程被创建后,进行一系列进程初始化、组件初始化(Activity、Service、ContentProvider、Broadcast)、主页面的构建、View加载。

2023-03-05 15:50:52 500

原创 Widget中的State-学习笔记

Widget 有 StatelessWidget 和 StatefulWidget 两种类型。StatefulWidget 应对有交互、需要动态变化视觉效果的场景,而 StatelessWidget 则用于处理静态的、无状态的视图展示。StatefulWidget 的场景已经完全覆盖了 StatelessWidget,因此我们在构建界面时,往往会大量使用 StatefulWidget 来处理静态的视图展示需求,看起来似乎也没什么问题。

2023-02-26 16:17:15 602

原创 Flutter-Widget-学习笔记

Widget 是整个视图描述的基础。

2023-02-19 15:10:25 485

原创 Flutter for Android

将 Flutter 添加到现有应用程序在 Flutter 中一次重写整个应用程序是不切实际的。对于这些情况,Flutter 可以作为库或模块逐步集成到您现有的应用程序中。然后可以将该模块导入到您的 Android 或 iOS(当前支持的平台)应用程序中,以在 Flutter 中呈现应用程序 UI 的一部分。或者,只是为了运行共享的 Dart 逻辑。添加到应用程序功能支持集成任何屏幕尺寸的多个实例。

2023-02-16 16:26:30 2255

原创 Dart语法基础补充

Dart 库中充满了返回 Future 或 Stream 对象的函数。这些函数是异步的:它们在设置一个可能耗时的操作(例如 I/O)后返回,而不等待该操作完成。async 和 await 关键字支持异步编程,让编写看起来类似于同步代码的异步代码。

2023-02-12 16:38:55 441

原创 Dar语法基础-泛型

类泛型相关

2023-02-12 15:11:55 550 1

原创 Dart语法学习-基础-类

类相关基础

2023-02-09 10:05:44 398

原创 Dart语法学习-基础 流程控制、异常、类

Dart语法基础:流程控制语句、异常、类。

2023-02-08 15:06:14 491

原创 leetCode动态规划题

leetCode动态规划

2023-02-06 19:56:54 70

原创 Dart语法学习-函数、类与运算符 学习笔记

Dart 是面向对象的语言,每个对象都是一个类的实例,都继承自顶层类型 Object。在 Dart 中,实例变量与实例方法、类变量与类方法的声明与 Java 类似。Dart 中并没有 public、protected、private 这些关键字,我们只要在声明变量与方法时,在前面加上“_”即可作为 private 方法使用。如果不加“_”,则默认为 public。不过,“_”的限制范围并不是类访问级别的,而是库访问级别。num?x, y;

2023-02-03 14:43:39 440

原创 Dart语法学习-数据类型

Numbers (int, double)Strings (String)Booleans (bool)Lists (List, also known as arrays)Sets (Set)Maps (Map)

2023-02-01 16:42:18 903

原创 Dart语法学习-变量

Dart语法学习。

2023-01-31 16:21:37 348

原创 Android studio集成flutter

AndroidStudio集成Flutter

2023-01-30 14:42:57 1415

原创 leetcode习题练习-每日更新

leetcode习题练习。

2023-01-29 10:08:33 346

原创 Android动态运行时权限

android 6.0(API 级别 23)开始,android引入了运行时权限,应用安装时不向其授予权限,应用运行时向其授予权限。如果在运行时该功能没有动态地申请相应的权限,就会抛出SecurityException异常。android的运行时权限的申请过程主要有两步:1、在需要申请权限的地方检查该权限是否被授权,如果已经授权就直接执行,如果未授权就动态申请权限。

2023-01-05 17:06:23 2193

原创 Android13适配

1.WebChromeClient的 API onReachedMaxAppCacheSize 没了2.WebSettings的setAppCacheEnabled(true) 没了WebView调整:废弃setAppCacheEnabled与setForceDark方法;(若设置 targetSdk>=33 则此项必需适配!)修改为。

2023-01-04 11:35:53 2702

原创 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。3.每个右括号都有一个对应的相同类型的左括号。1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。

2022-12-23 09:59:34 68

原创 141. 环形链表

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。给你一个链表的头节点 head ,判断链表中是否有环。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。

2022-12-22 10:10:36 74

原创 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 709

原创 Kotlin协程笔记:CoroutineScope管理协程

CoroutineScope 是实现协程结构化并发的关键。使用 CoroutineScope,可以批量管理同一个作用域下面所有的协程。

2022-12-21 19:03:54 3589

原创 Android Studio Profiler 检查内存

Android Studio Profiler 检查内存简单介绍。

2022-12-21 14:30:11 5801

原创 算法-206. 反转链表

请你反转链表,并返回反转后的链表。

2022-12-21 09:52:33 80

原创 TraceView使用

TraceView 是 Android SDK 中内置的一个工具,用于加载 trace 文件,用图形的形式展示代码的执行时间、调用次数及调用栈,便于我们分析。

2022-12-20 17:16:34 753

原创 kotlin协程笔记:Dispatchers

Kotlin 的 launch 会调用 startCoroutineCancellable(),接着又会调用 createCoroutineUnintercepted(),最终会调用编译器帮我们生成 SuspendLambda 实现类当中的 create() 方法。协程无法脱离线程运行,Kotlin 当中所有的协程,最终都是运行在线程之上的。协程创建出来以后,如何与线程产生关联的?

2022-12-19 20:24:25 606

原创 Kotlin协程 - launch原理 笔记

launch、async 可以创建、启动新的协程,那么协程到底是如何创建的?runBlocking{} 启动了第一个协程,launch{} 启动了第二个协程。

2022-11-19 18:03:11 1760

原创 基础知识笔记:协程基础元素

Kotlin 协程的基础元素:Continuation、SafeContinuation、CoroutineContext、CombinedContext、CancellationException、intrinsics。CombinedContext是 CoroutineContext 的一个实现类, SafeContinuation是 Continuation 的实现类。

2022-11-12 21:51:04 931

原创 Kotlin挂起函数基础

挂起函数,比普通的函数多了 suspend 关键字。通过suspend 关键字,Kotlin 编译器就会特殊对待这个函数,将其转换成一个带有 Callback 的函数,这里的 Callback 就是 Continuation 接口。例PS 转换过程中,函数的类型发生了变化:suspend ()->Any 变成了 (Continuation)-> Any?。

2022-11-06 16:24:10 1028

原创 Kotlin协程-try-catch基础

在 Kotlin 协程当中,我们通常把异常分为两大类,一类是取消异常(CancellationException),另一类是其他异常。在 Kotlin 协程当中,这两种异常的处理方式是不一样的。

2022-11-05 19:25:21 2315

原创 Kotlin协程-并发处理-基础

Kotlin协程是基于线程执行的。经过一层封装以后,Kotlin协程面对并发,处理方式与Java不同。在java的世界里,并发往往是多个线程一起工作,存在共享的变量。需要处理好同步问题。要避免把协程与线程的概念混淆。上述代码中没有任何并发任务,launch创建了一个协程,所有的计算都发生在协程中。所以不需要考虑同步问题。

2022-10-30 14:11:46 3112

原创 Kotlin协程-select基础

select——>用于选择更快的结果。基于场景理解比如客户端要查询一个商品的详情。两个服务:缓存服务,速度快但信息可能是旧的;网络服务,速度慢但信息一定是最新的。上述程序分为四步:第一步:查询缓存信息;第二步:缓存服务返回信息,更新 UI;第三步:查询网络服务;第四步:网络服务返回信息,更新 UI。用户可以第一时间看到商品的信息,虽然它暂时会展示旧的信息,但由于我们同时查询了网络服务,旧缓存信息也马上会被替代成新的信息。但是可能存在一些问题:如果程序卡在了缓存服务,获取网络服务就会无法执行。

2022-10-29 12:38:19 1105

原创 Kotlin-Flow基础学习

一、Flow简单介绍Flow——数据流Flow的特点是可以在发送和接收的过程中对数据进行变更。

2022-10-23 11:55:28 1167

原创 Android ANR分析-笔记

ANR:Application Not Responding,即应用无响应。

2022-10-17 16:54:06 2971

原创 Kotlin协程-Channel基础

Channel 是一个管道。Channel分为接收方和发送方,发送方发送数据,接收方接收数据。通过Log可以发现@coroutine#3接收、@coroutine#2发送。Channel可以跨越不同的协程进行通信。在 @coroutine#1当中创建的 Channel,然后分别在 @coroutine#2、@coroutine#3 当中使用 Channel 来传递数据。可以发现:上面的例子中通过泛型设置Channel中传递的数据类型是Int,又在协程中调用send方法,把数据发送到管道里。

2022-10-13 20:09:52 1217

原创 Kotlin协程基础-CoroutineContext

CoroutineContext是协程的上下文,它的使用场景很多。1.CoroutineScope的launch扩展函数的第一个参数就是CoroutineContext,默认值是EmptyCoroutineContext。2.withContext() 函数的参数中也有CoroutineContext。

2022-09-30 16:11:05 1352

原创 kotlin协程生命周期-基础

协程生命周期

2022-09-24 16:33:42 1048

空空如也

空空如也

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

TA关注的人

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