自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (2)
  • 收藏
  • 关注

原创 Flutter UI适配详解 —— Flutter开发必看!

Flutter中的宽高单位不同于Android中的dp和IOS中的pt,Flutter奉行另外一种单位,即逻辑像素。Flutter 遵循简单的基于密度的格式,如 iOS。资产可能是1.0x、 2.0x、3.0x或任何其他乘数。Flutter 没有dp 但有逻辑像素,与设备无关像素基本相同。所谓devicePixelRatio 表示物理像素在单个逻辑像素中的比例。devicePixelRatio表示1逻辑像素在设备上对应的物理像素数(px),不同设备的devicePixelRatio不尽相同,比如

2021-09-10 23:08:09 6258

原创 Java类加载机制

一、Java类加载机制中的类在讲Java类加载机制前,我想问问大家知道Java类加载机制中的这个类指的是什么吗?肯定有人会想“这不开玩笑吗,不就是我们写代码时创建的类吗”,严格上来讲,其实不是的,我们写代码所创建的“类”只是java文件,记得刚学Java时在终端用Java命令跑Java程序的时候吗?javac HelloWorld.javajava HelloWorldjavac和...

2019-12-06 17:02:26 429

原创 Java基础之反射机制

Java反射机制JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。Java的反射机制允许编程人员在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。那么反射的原理是怎样...

2019-12-02 22:08:33 387

原创 Kotlin协程学习指南

Kotlin自2016年发布1.0版本发展到现在的1.3版本也已经有三年了,其中更是在2017年被Google认定支持为Android官方开发语言,相信绝大多数Android开发者都曾关注过kotlin并已使用它,我大概是在1.2版本的时候开始用的,之前也接触过一些,但是觉得刚出来的东西可能不太稳定,就没有太在意,随着Kotlin语言的完善更新和我对它的深入使用,越发觉得用了就回不去了(当然是指回...

2019-08-06 14:12:19 730

原创 搞懂Handler去面试!

如果你没有听说过或者使用过Handler,那么你一定不是一个合格的Android开发。Handler作为我们最常使用的跨线程UI工具,你可能只知道它的使用,却没有了解过它的实现原理。可能有人会想,原理这种东西理解与不理解它,并不影响我们对它的使用。话是没错,可能原理这种东西对于大部分人最直接的作用就是面试了,对于Handler,它可是面试中的常客,与之相关提问最多的就是Handler的原理了...

2019-07-08 16:10:02 272

原创 Android多效果轮播器/Banner实现,支持无限轮播、自动切换、指示器动画

2019.9.12已封装成控件扔到GitHub上https://github.com/kjt666/Banner开篇接上篇文章动手实现你的ViewPager切换动画本次内容是利用ViewPager实现画廊效果图片轮播器,画廊效果已经在ViewPager上实现了,那么一个标准的轮播器无外乎下面几点要求:轮播的无限循环轮播器中最重要的一点就是能够实现无限循环,让图片首尾相连、流...

2019-06-25 11:30:03 5260 1

原创 自定义实现ViewPager切换动画

效果图基本原理要实现如上展示的两种效果,我们需要两个东西来帮助实现——clipChildren和PagerTransformer1)clipChildren这个属性见得不多,可能很多小伙伴不熟悉,这个属性是个布尔值,clip中文为裁剪的意思,clipChildren即为裁剪孩子(硬核翻译)。一般修饰在ViewGroup上,它可以表示是否限制处于容器内部的子控件可以越界绘制,...

2019-06-20 15:48:24 1046

原创 Android仿今日头条图片滑动退出效果

逛CSDN的时候,看到几篇写仿今日头条图片滑动退出效果的文章,闲着无聊便想着也给自己项目加上,实现的思路有很多种,本着就近原则选了一篇与自己思路相近的文章结合自己的实践总结一下。下载原文的Demo用了一下,发现了几点可以优化的地方:1、图片缩放上不太好使,放大缩小的同时就给你滑出去了2、没有暴露接口给用户实现更多的透明度变换效果,比如我不仅想要背景透明度在手指移动的时候发生变化,还有文...

2019-02-20 15:14:02 3693 22

原创 Android自定义View仿电影票分割线效果

2018.10.08更新添加支持gradle依赖,GitHub地址:https://github.com/kjt666/TicketDivideLine/tree/master。控件新增三个属性:1、分割线实线长度2、分割线虚线长度(间隔长度)3、分割线方向UI效果图一、需求分析这个效果可以理解为两个半圆+间断的线组成。1、定义这个控件需要如下属性:(1...

2018-01-31 14:45:24 3213 6

原创 使用Python爬虫+SMTP打造‘自动告白邮件脚本'

有一天在逛知乎可以用 Python 编程语言做哪些神奇好玩的事情?发现一条有趣的评论,说是通过python实现每日向女朋友(没有女朋友的也可以发给你的基友)发送一封爱意满满的邮件,当时觉得挺有趣的,于是就照模照样的也用python实现一次。整个代码的思路也很简单。爬取数据、云储存获取数据——整理排版——邮件发送。先放张效果图:本次实例用到的框架有:leancloud、reques...

2017-12-25 14:40:39 5108 2

原创 Android自定义进度条之BeautyProgressBar

代码一年前就已经撸好了,现在才想起来总结。。。先放张效果图吧。附上代码github地址:https://github.com/kjt666/BeautyProgressBar,支持依赖引入项目。概述可以看到上面实现了四种样式的进度条,带进度文字的长条形进度条、带进度文字的圆形进度条、仿IOS商店的圆形进度条、两端为圆形的长条进度条。今天主要讲的是最后一种,因为当初实现它的时候废了不...

2017-10-28 14:54:49 576

原创 Android中实现多线程的几种方式

通过合理选择多线程方案,可显著提升 App 的响应速度和用户体验,同时避免 ANR(Application Not Responding)问题。,内部通过 HandlerThread 处理异步任务,适合后台执行独立任务。Android 早期提供的异步任务工具,内部封装了线程切换逻辑。Java 并发框架提供的线程池管理,适合需要控制并发数量的场景。实现线程间通信,适用于需要频繁在主线程更新 UI 的场景。类直接创建并启动线程,适用于简单的异步任务。,适用于需要长时间运行的子线程任务。

2025-03-16 17:34:01 1260

原创 在Android中,子线程可以更新UI吗

子线程直接更新UI会引发崩溃,必须通过主线程机制切换。

2025-03-16 15:38:13 559

原创 Handler是如何实现跨线程通讯的

Handler通过将消息发送到目标线程的消息队列,结合Looper的循环处理机制,实现了线程间的安全通信。这种设计将多线程同步问题封装在消息队列内部,开发者只需关注消息的发送与处理逻辑,极大地简化了Android多线程编程的复杂度。

2025-03-16 12:10:54 345

原创 Flutter中的const和final的区别

在 Flutter(Dart 语言)中,const和final都用于声明不可变变量,但它们的核心区别体现在和上。

2025-03-15 15:13:20 162

原创 什么是状态管理?有何种方式可以实现?它们之间有什么区别?

是管理应用数据变化和传递的核心机制,其目标是高效同步 UI 与数据,并保持代码的可维护性。通过合理选择状态管理方案,可以显著提升 Flutter 应用的开发效率和运行性能。:通过事件(Event)驱动状态(State)变化,严格分离 UI 与业务逻辑。:应用中动态变化的数据(如用户输入、网络响应、页面切换)。:逻辑与UI解耦,支持异步事件,适合复杂流程。:官方维护,代码简洁,天然支持依赖注入。:代码简洁,功能全面(路由、国际化等)。:全局状态管理不够严格,大型项目易失控。:中小型应用,需要跨组件共享状态。

2025-03-14 18:27:38 429

原创 Mixin是什么,如何使用?有何限制?

在面向对象编程中,Mixin(混入) 是一种灵活的代码复用机制,通过 Mixin,开发者可以灵活地组合功能模块,解决代码复用问题,同时避免传统继承的局限性。Dart 的 Mixin 机制尤其强大且独特。

2025-03-14 17:36:49 92

原创 在Flutter中使用Future读取一个大文件会导致线程阻塞吗

操作是否阻塞主线程?解决方案异步读取文件否无需额外处理同步处理大数据是使用 Isolate 或 compute 函数分块处理数据否流式处理(Stream。

2025-03-14 13:00:33 252

原创 详解Flutter单线程模型,以及Flutter是如何通过单线程实现异步的

机制作用事件循环通过微任务队列和事件队列调度任务,确保主线程不阻塞。将异步操作拆分为非阻塞任务,利用事件循环实现高效调度。Isolate解决 CPU 密集型任务的并行问题,隔离内存避免竞争。

2025-03-13 16:40:00 384

原创 如何在Futter开发中做性能优化?

在Flutter开发中,性能优化是提升应用流畅度和用户体验的关键。但是对于没怎么接触过这方面的同学来说,可能对性能优化的理解还比较基础,这就需要从多个方面入手。首先,我们需要回顾一下之前学过的关于Flutter性能优化的知识点,比如三棵树、Widget生命周期、状态管理等,然后结合实际的开发场景,找到常见的性能问题及其解决方法。首先,我记得在Flutter中,Widget的重建是非常频繁的,尤其是在使用setState时。如果每次重建都创建大量的新对象,可能会导致垃圾回收频繁,从而影响性能。

2025-03-13 15:27:23 942

原创 Flutter三棵树是什么,为什么这么设计

Element 树通过复用相同类型的 Widget 对应的 Element,避免重复创建 RenderObject(如列表滚动时)。Flutter 的「三棵树」是其核心设计之一,用于高效管理 UI 的构建、更新和渲染。可复用:当 Widget 树变化时,Element 会对比新旧 Widget,决定是否更新或复用。:仅更新变化的 Widget 对应的 RenderObject,减少全局重绘开销。:Element 会销毁旧的并创建新的,即使 Widget 类型相同。相同,复用现有 Element,触发。

2025-03-12 16:29:03 837

原创 关于Flutter中两种Widget的生命周期详解

以下是Flutter中两种核心Widget(:适合静态UI或仅依赖外部数据的组件(如纯展示型组件)。:不可变,无内部状态,仅依赖父Widget传递的参数(触发重建,仅当父Widget传入新参数时才会重新构建。:根据参数创建UI,当父Widget更新时重新调用。对象管理可变状态,可主动触发UI更新。:State对象插入Widget树后。:接收父Widget传入的参数。// 必须调用super。:框架调用,创建关联的。

2025-03-12 16:20:39 996

转载 Kotlin 协程总结

协程并不是 Kotlin 提出来的新概念,其他的一些编程语言,例如:Go、Python 等都可以在语言层面上实现协程,甚至是 Java,也可以通过使用扩展库来间接地支持协程。「协程 Coroutines」源自 Simula 和 Modula-2 语言,这个术语早在 1958 年就被 Melvin Edward Conway 发明并用于构建汇编程序,说明协程是一种编程思想,并不局限于特定的语言。当我们在了解协程的时候,不可避免的会跟线程进程做比较做分析,下面来贴个图便于理解从Android 开发者。

2024-07-31 20:33:00 129

转载 Kotlin 扩展函数及原理

Kotlin 可以为一个不能修改的或来自第三方库中的类编写一个新的函数。这个新增的函数就像那个原始类本来就有的函数一样,可以用普通的方法调用,这种机制的函数称为扩展函数。// 扩展函数定义扩展函数的本质是一个对应 Java 中的静态函数,这个静态函数参数为接收者类型的对象,然后利用这个对象就可以访问这个类中的成员属性和方法了,并且最后返回一个这个接收者类型对象本身。这样在外部感觉和使用类的成员函数是一样的。另外,扩展函数与成员函数的相同点和不同点也是扩展函数中的重点。

2024-06-13 09:31:55 603

原创 如何在Flutter 中启用空安全

如果你的Upgradable或者Latest大多为绿色的话,那么你就继续下一个步骤就行了,这一步主要是让你心里有个底,知道自己的三方依赖对于空安全的支持是怎么样的。可能有的人会问,我现在已经是2.x版本的flutter了,也没见有什么特殊的啊,我怎么能确认已经开启了空安全呢?一旦项目开启了空安全检查,那么你的代码包括项目所依赖的三方库必须是要支持空安全的否则是无法正常编译的。如果遇到问题,说明还有库没升级到空安全,可以直接运行以下命令,强制适配,等完成后再解决有问题的库即可。表示不支持空安全的版本,

2023-06-02 15:45:51 1251

原创 Flutter2.x升级3.x版本遇到的问题及解决方案

项目原本使用的Flutter版本为2.5.3,现在要升级到3.0.5版本,结果升级完后项目直接编译不通过,报了一堆的错误,如果你也是这种情况,可以按我接下来讲的操作试一试,反正我就是这么解决问题的。

2023-05-22 16:23:23 2085 3

原创 解决Kotlin升级1.7以上版本时Room库报错的问题

你要做的是检查你的Room版本是不是低于2.4.3,如果低于,那就升级Room版本,因为这个报错是Room库的bug,低于2.4.3的版本无法识别kotlin1.7中的挂起函数。如果你的项目升级Kotlin版本到1.7以上后,在对项目进行编译时Room报错,不要去降Kotlin版本或者去把DAO中函数的。关键字去掉,虽然这么做后项目可以编译通过,但这不是问题的解决办法。

2023-05-18 16:37:11 1001

原创 RecyclerView的好朋友 — SnapHelpter

SnapHelpter,相信很多人可能都不知道它或者没怎么关注过它,但是通过它实现的效果肯定都见过。比如短视频应用中切换视频时一划划一页的效果,这可不是ViewPager实现的啊,使用ViewPager实现的话成本太高,所以这类效果都是通过RecyclerVIew + SnapHelper来实现的,拿刚才讲的短视频切换效果来说,使用的就是RecyclerVIew和SnapHelper的子类PagerSnapHelper来实现的。说了这些,那么SnapHelper到底是什么东西呢?见名思意,Snap,翻译成中

2022-07-04 17:56:03 634

原创 flutter打包aar并上传Maven私服,flutter模块与原生工程解耦

添加Flutter模块作为依赖通常在做Flutter混合开发时,我们需要创建一个flutter模块,并通过模块依赖的方式添加给原生工程,这种方式对需要进行flutter混合开发的人员来说,没有问题,但是对于同组其他不需要进行flutter混合开发的人来说,却增加了额外的成本,比如需要配置Flutter开发环境,每次同步flutter module最新代码。所以,为了非flutter开发人员更好的开发体验,我们需要对flutter模块换一种依赖方式—AAR依赖添加Flutter AAR作为依赖Flu

2021-09-26 18:20:50 1661

转载 3000字扫盲shell基础知识(新手必备)

不论前端还是后端,再学会Linux的基础上,还应该学会写一些简单的Shell。不止是工作,日常中想做一些东西,如果手动做就很累人也费时间,如果你会用Shell脚本处理就很简单了,本文普及的shell的一些基础知识。后面还会持续更新。shell基础语法之变量shell 变量命名变量只能由大小写字母,数字和下划线组成。 变量名称不能以数字开头。 变量可以存储数字类型或者字符串类型。 变量赋值等号两边不能有空格。 字符串的变量可以用单引号或者双引号括起来。...

2021-08-22 17:43:40 509

原创 解决:Flutter 关闭Dialog退出App问题

最近使用Flutter重写替换了原生的一部分页面,页面中有到Dialog,结果弹出的时候好好的,关,关不掉了,一点确认或取消按钮就直接将App退到后台了,这让我百思不得其解,之前也有用过Flutter的Dialog,也没出现过这种情况啊,明明是一毛一样的代码。就是这段代码showDialog( context: context, barrierDismissible: true,

2021-08-21 18:11:03 3033

原创 原生与Flutter页面跳转并传递数据

在App开发中,从一个页面跳转至另一个页面并附带一些参数供下一个页面使用是最为常见的了,那么,在原生与Flutter混合开发的情况下,页面互相跳转并附带参数传递怎么实现呢?

2021-06-19 20:00:44 5095 3

原创 Flutter—ListView嵌套ListView不显示的问题

在App的开发过程中,经常遇到一些需要ListView嵌套ListView的场景,如果是原生开发的话,怎么处理我们应该是再熟悉不过了,但是现在换到Flutter,怎么处理呢?其实很简单,

2021-06-15 21:53:01 1053 2

原创 原生与Flutter通信

之前讲过一篇Flutter与原生通信,为大家讲解了Flutter如何调用原生,但是没有介绍原生如何调用Flutter,那么原生如何调用Flutter呢?诶~,还是tongguo

2021-06-13 23:49:27 1823 5

原创 Flutter自定义Widget—随滑动改变高度的PageView

可以随滑动展示不同高度的图片效果实现方案使用PageController对PageView滑动监听,动态设置容器高度。核心代码_pageController.addListener(() { setState(() { //向左滑 if (_pageController.page > _currentIndex) { _currentIndex = _pageController.page.floor();

2021-06-12 17:24:14 2290 1

原创 Flutter自定义Widget—可加载原生图片资源的Image

上一篇博客讲解了Flutter如何调用原生图片资源

2021-06-05 18:41:25 588 2

原创 Flutter调用原生图片资源

在Flutter与原生的混合开发中,经常遇到Flutter与原生都需要使用同一份图片的情况,并且由于原生是主导,图片资源都在原生这侧。那么,Flutter可不可以直接使用原生的图片资源呢?——答案是不可以的,Flutter并不能直接访问原生侧的图片资源,官方没有提供这样的API供我们使用。那么,在Flutter侧再放一份图片资源呢?虽然可以这么做,但这样显然是不合理的,除了要维护两套资源文件外,安装包的大小也会增加,尤其是那种有很多图片资源的App。所以,为了避免两份同样图片资源的存在,我们只能想办法

2021-05-30 12:38:56 1653 1

原创 Flutter与原生通信

—— Flutter作为一个跨平台框架,一经问世,便受到众多开发的追捧,发展至今相信已经有很多公司或个人将其加入自己的项目,进行混合开发,那么FLutter如何与原生通信呢?—— 本次就以Android为例,介绍Flutter如何与Android之间进行通信,调用Android代码。目录MethodChannelFlutter端代码Android端代码PigeonMethodChannelFlutter与原生之间通信是通过一个叫MethodChannel的东西来实现的,它的名

2021-05-26 18:05:16 3567 2

原创 Android项目创建Flutter module后运行编译失败问题

已有Android项目需要接入Flutter并且创建Flutter module后运行app编译失败的,查看一下下面两个因素是不是Android X项目 Flutter版本是否大于1.17如果你不是Android X项目,并且你的Flutter版本大于等于1.17,那么你无论如何是运行不起来你的app的。因为从Flutterv1.17开始,Flutter模块仅支持Android上的AndroidX应用程序。这点在Flutter官网——Add Flutter to existing ap...

2021-05-19 19:04:49 694

转载 什么是泛型?泛型的基本原理与使用优势。

1. 什么是泛型?泛型将接口的概念进一步延伸,“泛型”的字面意思就是广泛的类型。类、接口和方法代码可以应用于非常广泛的类型,代码与它们能够操作的数据类型不再绑定在一起,同一套代码可以用于多种数据类型,这样不仅可以复用代码,降低耦合性,而且还提高了代码的可读性以及安全性。讲起来优点抽象,我们看个实际的例子。2. 先来看一个简单的泛型例子package genericity.demo;/** * @author BastetCat * @data 2019/8/8 21:14 */p

2021-02-09 16:50:11 3088

dynamicPageView.dart

Flutter自定义Widget-DynamicPageView(随滑动改变高度的PageView)

2021-06-12

Android自定义控件-仿今日头条图片上下滑动退出

Android自定义控件-仿今日头条图片上下滑动退出

2021-02-02

空空如也

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

TA关注的人

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