- 博客(441)
- 资源 (22)
- 问答 (1)
- 收藏
- 关注
原创 Android群英传:神兵利器——出版祭
Android群英传:神兵利器《Android群英传:神兵利器》——看上去好像是第一本书的续集,但实际上,这本书的内容,在我写《Android群英传》的时候就已经写了不少了,碍于出版社的篇幅限制与主题的统一,很多内容并没有放到《Android群英传》中。由于第一本书上市后,受到各位开发者的抬爱,销售情况还算理想,所以出版社一直希望我能出一本续集,因此,我便萌生了想要把这本书补全的想法。
2016-08-18 10:10:56 22711 74
原创 对不起!我来晚了!——《Android群英传》出版祭
对不起!我来晚了!——《Android群英传》出版祭历时将近一年,我的第一本书终于就要出版了,虽然经历种种曲折,历经磨难,最终还是赶在八月份的尾巴上,修成正果。 首先,要向大家道歉,本来预计是在6月份上市的书,一拖再拖,直到现在才得以出版,让不少朋友一等再等,这里,向这些朋友的耐心,狠狠的点个赞。写书之前其实,当官杨主编第一次找我写书的时候,其实我是,是想拒绝的,我跟女朋友讲,我拒绝,因为,
2015-09-08 22:02:59 37330 163
原创 向产品宣战——开发者眼中的Android UI Design
向产品宣战——开发者眼中的Android UI Design 准备了半个月,思考产品设计、交互设计,见证了公司的产品、UE和开发的撕逼,将自己的思考、感悟,整理成下文,谨代表广大程序猿,向设计狮、产品X开战。希望广大程序猿能够坚持贯彻Google的Material Design,切实认真负责的执行Android的设计思想,将MD设计带到产品中去,不做中国特色的App。
2015-06-09 14:18:21 32441 169
原创 解放双手——Android自动化测试
人们懒的走路,才创造了汽车;人们懒的爬楼,才创造了电梯;人们懒的扫地,才创造了自动扫地机器人。人类的进步,离不开这些喜欢偷懒的人,现在,程序猿将偷懒上升到了一个新的高度——利用程序来进行自动化软件测试,将测试工程师从繁琐的测试用例中解脱出来,从此可以一边喝着咖啡,一边看着程序自动测试,不必看着测试用例重复无数次的测试步骤,也不必担心操作失误而导致不必要的错误,更不用担心压力测试而导致的身心俱疲。想了解程序猿是如
2015-05-11 16:42:06 66120 72
原创 Eclipse,到了说再见的时候了——Android Studio最全解析
去年的Google大会上,Google带给我们一个小玩具——Android Studio,说它是玩具,是因为它确实比较菜,界面过时,操作不流畅,效率也不高,但是现在,虽然版本还是0.6,甚至都没到1.0,但是我们可以发现亲儿子到底是亲儿子,现在的Android Studio已经今非昔比,用了一段时间,简直爱不释手,我觉得,It's time to say goodbye eclipse!本文将带领
2014-06-14 17:24:26 42514 99
原创 我也来开发2048之终极奥义
本次教程跟之前隔了不少时间哈,有点忘记了的建议先看看前面的熟悉下,今天我准备把这个2048给结束了,拖了这么久。按照惯例,我们已经把准备工作都做好了,今天这一部分信息量比较大,也是整个游戏的核心所在,所以我准备分功能来讲,最后大家结合源码来看就不会感觉太吃力了。1、初始化游戏 初始化的时候,我们要干嘛呢,首先要看配置,配置了几行,然后先画好面板,然后要给在面板上随机生成2个数字Item,这涉及到2
2014-04-27 13:39:39 30796 367
原创 Android拼图游戏开发全纪录1
今天我们继续来讲解Android拼图游戏全纪录的第二篇,今天要完成的任务比较简单:界面布局和资源文件1资源文件:我们在开发一个项目的时候,首先要定下这个App的基调,是小清新呢还是重口味,所以我们需要定义一些颜色、style等首先是颜色等: #000000 #FFFFFF #F56A47 #FFFFFF #727
2014-01-31 11:39:51 26281 61
原创 使用FVM轻松管理Flutter版本
点击上方蓝字关注我,知识会给你力量FVM(Flutter Version Manager)是一个在单设备上,轻松的切换Flutter版本的工具,同时可以保证项目开发成员的版本相同,避免产生API差异。它的文档非常清晰,使用也非常简单。官网地址:https://fvm.app/在官网上找到对应平台的安装指令。Github:https://github.com/leoafarias/fvm常用指令如下...
2024-09-25 08:30:32 425
原创 使用Riverpod Lint & Riverpod Snippets更高效的创建Flutter Apps
点击上方蓝字关注我,知识会给你力量随着每一个新版本的发布,Riverpod 及其生态系统都在不断完善:核心软件包为反应式缓存和数据绑定提供了强大的应用程序接口Riverpod Generator 软件包简化了学习曲线并带来了显著的可用性改进(我在这里已经介绍过了)Riverpod Snippets扩展帮助我们轻松创建提供者和消费者新的 Riverpod Lint 添加了许多有用的Lint和重构选项...
2024-09-09 08:30:32 1107
原创 如何在新的Flutter Riverpod Generator中使用Notifier和AsyncNotifier
点击上方蓝字关注我,知识会给你力量随着 riverpod_generator 软件包的推出,使用 Riverpod 编写 Flutter 应用程序变得容易多了。使用新的 Riverpod 语法,我们可以使用 @riverpod 注解,让 build_runner 即时生成所有providers。我已经在前文中介绍了所有基础知识。在本文中,我们将进一步了解在 Riverpod 2.0 中添加的 No...
2024-09-02 08:30:39 1027
原创 使用Flutter Riverpod Generator来自动创建Providers
点击上方蓝字关注我,知识会给你力量Riverpod 是 Flutter 功能强大的反应式缓存和数据绑定框架。它为我们提供了许多不同类型的provider,我们可以用它们来:访问代码中的依赖关系(使用 Provider)缓存来自网络的异步数据(使用 FutureProvider 和 StreamProvider)管理本地应用程序状态(使用 StateProvider、StateNotifierPro...
2024-08-22 08:30:24 600
原创 从源码看Flutter状态栏高度之谜
点击上方蓝字关注我,知识会给你力量写过Android的开发者都知道,关于状态栏高度的计算,Google改了一版又一版,依然还有很多兼容性问题,那么来到Flutter这边,问题突然变得简单了,通过下面的方法就可以很方便的获取。MediaQuery.of(context).padding.top本来很开心的完成任务了,直到有同事反馈这个方法有时获取的状态栏高度为0,但有时候又是对的,很奇怪,那么到底是...
2024-08-12 08:39:48 951
原创 纯血鸿蒙 璀璨星河
点击上方蓝字关注我,知识会给你力量华为最近可谓是加班加点,前段时间华为给出了鸿蒙系统的计划表,让大家都摩拳擦掌,想看看华为到底有几把刷子,这次的621HDC大会,就是华为给全世界的第一个交待。最近在网上经常流传着这样一张图:大体意思就是:根据Counterpoint Research报告显示,今年一季度,鸿蒙在中国市场份额为17%,而苹果的iOS为16%。这意味着,鸿蒙在中国市场首次超越iOS,成...
2024-06-21 18:01:59 1024
原创 Flutter局部刷新三剑客
点击上方蓝字关注我,知识会给你力量局部刷新作为提高Flutter页面性能的重要手段,是每一个Flutter老手都必须掌握的技巧。当然,我们不用非得使用Riverpod、Provider、Bloc这些状态管理工具来实现局部刷新,Flutter框架本身也给我们提供了很多方便快捷的刷新方案,今天要提的就是Notifier三剑客,用它来处理局部刷新,代码优雅又方便,可谓是居家必备之良器。ChangeNo...
2024-06-19 08:30:20 974
原创 从Flutter范儿的单例来看Dart的构造函数
点击上方蓝字关注我,知识会给你力量单例模式单例模式应该是设计模式中使用的最广泛的一种设计模式了,在Kotlin中,甚至为它单独创建了一个语法糖——object类,来快速实现单例模式,而在Dart中,并没有像Kotlin这样的语法糖,所以,参考单例的一般实现,我们可以很容易的实现下面这样一个单例。classSingleton{staticSingleton?_instance;...
2024-05-07 08:30:15 916 1
原创 从源码看Flutter Android端的启动流程
点击上方蓝字关注我,知识会给你力量Flutter容器Flutter在Android中的渲染载体就是Flutter容器,通常是以Activity和Fragment的形式承载,虽然也有FlutterView,但是需要单独处理的关联方法太多,所以不太建议使用,这篇文章将分析Flutter在Android中的加载和启动流程,了解Flutter是如何在Android中加载并渲染的。小小Android,eas...
2024-04-07 08:30:45 875
原创 Flutter鸿蒙终端一体化—鹊桥相会
点击上方蓝字关注我,知识会给你力量在鸿蒙中开发Flutter项目,一个最大的问题,就是「不太会写鸿蒙代码」,这对于一个Flutter开发者来说,虽然不是一件很麻烦的事,但由于现在鸿蒙的版本和文档还略有一些混乱,所以要写好还是有一些麻烦的,所以,秉着能用工具解决的问题就不要自己写的原则,我们参考Native的Flutter Channel的实现,也就是pigeon的方式,不熟悉的同学可以参考我之前的...
2024-03-18 08:30:07 891
原创 Flutter鸿蒙终端一体化-天下一统
点击上方蓝字关注我,知识会给你力量在前面的文章中,我们了解了如何使用FlutterPage来创建Flutter容器。Flutter鸿蒙终端一体化-混沌初开Flutter鸿蒙终端一体化-珠联璧合但更多的时候,我们需要的是一种类似FlutterFragment的方式来进行引用,可喜的是,鸿蒙实现这种方式也并不复杂,因为不论是FlutterPage,还是FlutterFragment,它内部实际上是通过...
2024-03-12 08:30:44 1896
原创 Flutter鸿蒙终端一体化-珠联璧合
点击上方蓝字关注我,知识会给你力量在上一篇文章中,我们初步了解了在鸿蒙中使用Flutter的可能性和可用性,还没看过的可以参考下面的链接。Flutter鸿蒙终端一体化-混沌初开在文章的最后,我们分析了两种混编模式,和Android、iOS类似,分别是源码依赖和产物依赖,在我们的项目中,由于很早之前就开始介入Flutter开发,同时抽象了一套Flutter的轻量级渲染模式,所以,这里我们会使用产物依...
2024-01-31 08:30:27 3492 1
原创 Flutter鸿蒙终端一体化-混沌初开
点击上方蓝字关注我,知识会给你力量环境配置欲练此功,必先仔细阅读此项目的README文件十遍以上。flutter_flutter项目,这是我们整个工程的核心,但是很多人都倒在了第一步,其原因,就是——需要使用Dev分支!!!https://gitee.com/openharmony-sig/flutter_flutter/tree/dev/当前项目已经支持Linux、Mac、Windows环境下使...
2024-01-24 08:30:33 2323
原创 真•文本环绕问题的探究和分享
点击上方蓝字关注我,知识会给你力量前言上周领导安排了一个任务:希望我们的动态展示不是固定把图片展示在文本的上面或者下面,希望图片放在文本内容里,也不需要很复杂的效果,就排版好看就行。Ok,这不就是富文本吗,我一下子就联想到了RichText,一想到RichText支持WidgetSpan,我就知道问题不大,但是经过测试发现这里面是个大坑......话不多说,先展示一下本地Demo的实际效果图:--...
2023-10-20 08:30:17 360 1
原创 为 TheRouter 开发一个 IDEA 插件
点击上方蓝字关注我,知识会给你力量为 TheRouter 开发一个 IDEA 插件❝本插件代码已全部开源,走过路过请给个star:https://github.com/kymjs/TheRouterIdeaPlugin❞这篇文章是假定你已经有了 idea 插件开发的入门知识,来教你如何实现一个实际项目的功能。如果你还不知道如何开发一个插件,建议先从这个链接查看官网相关文档 https://plu...
2023-10-12 08:30:34 332
原创 Flutter混编方案在起点客户端的实践之路
点击上方蓝字关注我,知识会给你力量起点读书客户端一直紧跟新技术的潮流,从很早开始,就在进行Flutter的尝试,在筹备了许久之后(移除了包大小的KPI指标),我们终于在最新的业务开发中,使用了Flutter。Flutter虽然会带来一些包体积的增加,但带来的收益却是:愉悦的开发体验,不用再忍受漫长的编译,强大的热更新可以快速进行UI开发跨端的统一UI设计,双端不用做太多的适配就可以运行开发效率提升...
2023-09-26 08:30:34 481
原创 Android编译的小知识
背景Android是如何进行编译的? 项目中的源代码是如何一步步被执行为可以安装到手机上的apk的? 文章会一一给大家介绍,尽量以代码为例,好让大家快速理解。文末有福利~1.认识Gradle1.1 Gradle简介官方文档:https://docs.gradle.org/7.3.3/userguide/what_is_gradle.html官方解释:Gradle是一个开源的自动化构建工具。 现...
2023-09-19 08:30:28 1258
原创 hwui介绍与分析
hwui全称**HardwareAcceleratedRenderingEngineforUI,**hwui是一个基于GPU加速的2D图形引擎。HWUI的目标是提供高效、稳定、高质量的2D图形渲染能力,为Android系统的UI体验提供技术支持。相关源码位于目录android/platform/framework/base/libs/hwui文末有福利~hwui的大部分代码以C++实现,Andro...
2023-09-07 08:30:59 1234 1
原创 Flutter性能揭秘之RepaintBoundary
点击上方蓝字关注我,知识会给你力量Flutter会在屏幕上绘制Widget。如果一个Widget的内容需要更新,那就只能重绘了。尽管如此,Flutter同样会重新绘制一些Widget,而这些Widget的内容仍有部分未被改变。这可能会影响应用程序的执行性能,有时影响会非常巨大。如果您正在寻找一种方法,来防止不必要的部分重绘,您可以考虑利用RepaintBoundary。在这篇博客理,我们将探讨Fl...
2023-08-18 19:59:43 311
原创 当我用ChatGPT摸了一上午鱼,结果......
点击上方蓝字关注我,知识会给你力量经常有人问我,ChatGPT出来这么久了,你怎么不写点教程(割点韭菜)呢?其实,从它一出来,我就关注了,也在平时的工作中进行了使用,正好最近在处理一个埋点的问题,就拿ChatGPT来进行下演示吧,看我怎么用ChatGPT来摸鱼,解决我们平时遇到的问题。问题是这样的,相信很多朋友也遇到过,那就是RecyclerView的Item曝光埋点问题。最开始对埋点数据要求不高...
2023-07-05 08:30:34 313
原创 从Kotlin中return@forEach了个寂寞
点击上方蓝字关注我,知识会给你力量今天在Review(copy)同事代码的时候,发现了一个问题,想到很久之前,自己也遇到过这个问题,那么就来看下吧。首先,我们抽取最小复现代码。(1..7).forEach{if(it==3){return@forEach}Log.d("xys","Num:$it")}很简单的代码,我相信很多人都这样写...
2023-06-12 08:30:19 922
原创 FlutterComponent最佳实践之Widget Lifecycle
点击上方蓝字关注我,知识会给你力量了解Flutter的生命周期,是我们写出优雅的App的基石,通过生命周期的适配,可以让代码更加稳健,鲁棒性更好。Widget生命周期下面这张图,就展示了一个Widget的整体生命周期示例。当你把BuildContext分配给Widget时,一个内部标志位—mounted会被设置为true。这会让Framework知道这个Widget目前已经挂载到Widget Tr...
2023-04-11 08:30:16 505
原创 FlutterComponent最佳实践之国际化
点击上方蓝字关注我,知识会给你力量在Android中,我们可以通过不同的strings.xml文件来实现国际化的不同语言需求,那么在Flutter中,官方同样也提供了国际化的适配方案,官方文档如下所示。https://docs.flutter.dev/development/accessibility-and-localization/internationalization本地化与国际化本地化(...
2023-04-04 08:30:03 501
原创 从源码看Flutter BuildContext的秘密
点击上方蓝字关注我,知识会给你力量我们每次在写Flutter代码的时候,都会看到这个参数——BuildContext,在Android开发中,也经常看见一个类似的东西——Context,它们是不是一样的呢?其实说一样也对,它们都是上下文的关键承载者,但是却也不一样,因为它们本质上是两个不同的概念。在Flutter中,BuildContext的源码如下。从注释中我们就可以看出,[BuildConte...
2023-03-28 08:30:46 595
原创 FlutterComponent最佳实践之Widget尺寸
点击上方蓝字关注我,知识会给你力量在Flutter和在Native中,对一个Widget的尺寸测量,一直都是一个非常麻烦的事情,大部分时间,我们都是按照约束和具体的尺寸来进行布局,但有些时候,我们不得不拿到动态的Widget尺寸来实现自己的一些布局策略。通常来说,我们会有三方面的需求。测量自己的尺寸测量Parent的尺寸测量Child的尺寸测量自己的尺寸要获取你自身的Widget尺寸,其实只需要通...
2023-03-21 08:44:21 718
原创 FlutterComponent最佳实践之Timer的妙用
点击上方蓝字关注我,知识会给你力量Timer在Flutter中,通常是用来构建延时的异步任务的,在讲解它的妙之前,我们先来看看Timer的基操。Timer基操Timer广义上可以理解为一个倒计时器,它从创建到结束会经历下面三个过程:Creates a timerExecutes a callbackThe timer finishes创建一个Timer非常简单。finaltimer=Time...
2023-03-14 08:30:47 651
原创 Flutter中的异步执行策略
点击上方蓝字关注我,知识会给你力量在Flutter中,如何执行一段延迟执行的异步代码?我们可以找到下面这些方法。scheduleMicrotaskFuture.microtaskFutureFuture.delayedTimer.runWidgetsBinding.addPostFrameCallbackSchedulerBinding.addPostFrameCallback你可能会说,这是相当...
2023-03-09 08:30:26 786
原创 Flutter布局指南之约束和尺寸
点击上方蓝字关注我,知识会给你力量Flutter布局总纲——向下传递约束,向上传递尺寸。Box约束约束是Flutter布局的核心,在Flutter中,约束的表现形式是通过Constraints类来实现的,所有的非滚动布局模型,都通过BoxConstraints来进行约束,它的代码如下。从上面的代码可以看出,约束本质上就是「宽」「高」上的「最大」「最小」范围。BoxConstraints具有传递性,...
2023-03-06 08:30:50 1172
原创 FlutterComponent最佳实践之动画的显和隐
点击上方蓝字关注我,知识会给你力量Flutter中包含大量的动画组件和自定义动画方式,所以,在合适的场景下选择合适的动画实现方式就成了决定代码质量好坏的一个重要因素。动画选择决策树Flutter中的动画从广义上来讲可以分为两类,一类是基于绘制的动画(Drawing-based animations),另一类是基于代码的动画(Code-based animations)。下面这个决策树,是Flutt...
2023-02-28 08:30:57 681
原创 闲言碎语-第八期
点击上方蓝字关注我,知识会给你力量时间一晃就过去了,22年的总结还没来得及写,转眼已经2023年了。22年对于很多人来说,应该都是比较魔幻的一年,特别是在上海的朋友,一小半的时间都在居家办公,疫情不仅影响了工作,更影响了经济,很多人收入降级、失业,或是离开上海,完全放开后,大部分人都经历了一次痛苦的感染过程,一时间朋友圈全是新冠诊断现场直播,好在经历过这一次感染后,大部分人都回归了正常的生活轨道,...
2023-02-06 08:30:45 580
原创 Flutter混编工程之异常处理
点击上方蓝字关注我,知识会给你力量Flutter App层和Framework层的异常,通常是不会引起Crash的,但是Engine层的异常会造成Crash。而Flutter Engine部分的异常,主要是libfutter.so发生的异常,这部分的异常,在Dart层无法捕获,一般会交给类似Bugly这样的平台来收集。我们能主动监控的,主要是Dart层的异常,这些异常虽然不会让App crash,...
2023-02-06 08:30:45 1465
原创 后新冠时代
自从国家卫健委宣布防控放开之后,所有人都为之一震,原来的【躺平党】慌了,就这么分开了,都不缓一缓吗?原来的【封控党】也慌了,就这么分开了,我们的脸往哪放啊?也许刚放开的时候,大家都还没意识到会出现现在这幅境况,躺平党认为这就是普通感冒,大家都得一次就好了,封控党认为国家抛弃我们了。但实际上,不管是哪种观点,后面的路,都需要我们自己走了。这种猝不及防让所有人都很疑惑,前几天还没有48h核酸不能进饭店...
2022-12-25 15:26:36 1612
原创 Kotlin泛型的型变之路
点击上方蓝字关注我,知识会给你力量之前就写过一篇泛型的文章,但是总觉得写得不够系统,所以最近对泛型又作了些研究,算是对这篇文章的补充了。kotlin修炼指南7之泛型泛型,是为了让「类」、「接口」、「方法」具有更加通用的使用范围而诞生的,举个例子,假如我们不使用泛型,那么一个List中可以装得下任何对象,这么做的问题就在于,在使用时,需要对类型进行检查,不然就会转换异常。所以,我们需要将这种检查前置...
2022-12-19 08:30:16 1386
Fragment使用动画问题
2014-09-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人