十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1 夏天的飞鸟,飞到我的窗前唱歌,又飞去了。秋天的黄叶,它们没有什么可唱,只叹息一声,飞落在那里。
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了长岛免费建站欢迎大家使用!
stray birds of summer come to my window to sing and fly away.
and yellow leaves of autumn, which have no songs, flutter and fall
there with a sign.
2 世界上的一队小小的漂泊者呀,请留下你们的足印在我的文字里。
o troupe of little vagrants of the world, leave your footprints in my words.
3 世界对着它的爱人,把它浩翰的面具揭下了。它变小了,小如一首歌,小如一回永恒的接吻。
the world puts off its mask of vastness to its lover.
it becomes small as one song, as one kiss of the eternal.
4 是大地的泪点,使她的微笑保持着青春不谢。
it is the tears of the earth that keep here smiles in bloom.
5 无垠的沙漠热烈追求一叶绿草的爱,她摇摇头笑着飞开了。
the mighty desert is burning for the love of a bladeof grass who
shakes her head and laughs and flies away.
6 如果你因失去了太阳而流泪,那么你也将失去群星了。
if you shed tears when you miss the sun, you also miss the stars.
7 跳舞着的流水呀,在你途中的泥沙,要求你的歌声,你的流动呢。你肯挟瘸足的泥沙而俱下么?
the sands in your way beg for your song and your movement, dancing
water. will you carry the burden of their lameness?
8 她的热切的脸,如夜雨似的,搅扰着我的梦魂。
her wishful face haunts my dreams like the rain at night.
9 有一次,我们梦见大家都是不相识的。我们醒了,却知道我们原是相亲相爱的。
once we dreamt that we were strangers.
we wake up to find that we were dear to each other.
10 忧思在我的心里平静下去,正如暮色降临在寂静的山林中。
sorrow is hushed into peace in my heart like the evening among the silent trees
Still water run deep! 静水常深
It nerver rains,but it pours!不鸣则已,一鸣惊人
1.A bad workman always blames his tools. 拙匠总怪工具差。
2.A contented mind is a perpetual feast. 知足长乐。
3.A good beginning is half the battle. 好的开端等于成功一半。
4.A little pot is soon hot. 壶小易热,量小易怒。
5.All lay loads on a willing horse. 好马重负。
6.A merry heart goes all the way. 心情愉快,万事顺利 。
7.Bad excuses are worse than none. 狡辩比不辩护还糟 。
8.Character is the first and last word in the success circle.
人的品格是事业成功的先决条件。
9.Cleanliness is next to godliness. 整洁近于美德 。
10.Courtesy costs nothing. 彬彬有礼,惠而不费 。
11.Doing nothing is doing ill. 无所事事,必干坏事。
12.Early to bed, early to rise, make a man healthy, wealthy, and wise.
睡得早,起得早,聪明、富裕、身体好 。
13.Empty vessels make the most noise. 满瓶子不响,半瓶子晃荡 。
14.Every man hath his weak side. 人皆有弱点 。
15.Everything ought to be beautiful in a human being: face, dress, soul and idea.
人的一切都应当是美丽的:容貌、衣着、心灵和思想。
16.Extremes are dangerous. 凡事走向极端是危险的 。
17.Good advice is harsh to the ear. 忠言逆耳 。
18.Grasp all, lose all. 欲尽得,必尽失 。
19.Great hopes make great men. 伟大的理想造就伟大的人物。
20.Handsome is he who does handsomely. 行为美者才真美。
21.Have but few friends, though many acquaintances. 结交可广,知己宜少。
22.Hear all parties.兼听则明,偏听则暗 。
23.He is a wise man who speaks little. 智者寡言。
24.He is not laughed at that laughs at himself first.
有自知之明者被人尊敬。
25.He is rich enough that wants nothing.
无欲者最富有,贪欲者最贫穷。
26.He is truly happy who makes others happy.
使他人幸福的人,是真正的幸福。
27.Honesty is the best policy. 诚实乃上策。
28.Hope for the best and prepare for the worst.?? 抱最好的希望,作最坏的准备 。
29.Idleness is the root of all evil. 懒惰是万恶之源 。
30.If we dream, everything is possible. 敢于梦想,一切都将成为可能。
31.Kind hearts are the gardens, kind thoughts are the roots, kind words are flowers and kind deeds are the fruits.
仁慈的心田是花园,崇高的思想是根茎,友善的言语是花朵,良好的行为是果实。
32.Laugh, and the world laughs with you; Weep, and you weep lone.
欢笑,整个世界伴你欢笑。哭泣,只有你独自向隅而泣 。
33.Life is measured by thought and action not by time.
衡量生命的尺度是思想和行为,而不是时间。
34.Life is not all beer and skittles. 人生并非尽是乐事 。
35.Long absent, soon forgotten. 别久情疏 。
36.Look before you leap. 三思而后行 。
37.Lookers-on see most of the game. 旁观者清,当局者迷。
38.Manners make the man.观其待人而知其人 。
39.Misfortune tests the sincerity of friends. 患难识知交。
40.No cross, no crown.没有苦难,就没有快乐 。
41.Nobody's enemy but his own. 自寻苦恼 。
42.One man's fault is another man's lesson. 前车之覆,后车之鉴 。
43.Pardon all men, but never thyself. 严以律已,宽以待人。
44.Reason is the guide and light of life. 理智是人生的灯塔 。
45.Sadness and gladness succeed one another. 乐极生悲,苦尽甘来 。
46.Still waters run deep.流静水深,人静心深 。
47.The fire is the test of gold; adversity of strong men. 烈火炼真金,逆境炼壮士 。
48.The fox may grow grey, but never good. 江山易改,本性难移 。
49.The more a man learns, the more he sees his ignorance. 知识越广博,越感已无知 。
50.Virtue is a jewel of great price. 美德是无价之宝 。
51.Weak things united become strong. 一根筷子易折断,十根筷子硬如铁 。
52.We can't judge a person by what he says but by what he does.
判断一个人,不听言语看行动 。
53.Where there is a will there is a way. 有志者,事竟成 。
54.Will is power. 意志就是力量 。
55.Wise men are silent; fools talk. 智者沉默寡言,愚者滔滔不绝 。
56.Wise men learn by others' harm, fools by their own.
智者以他人挫折为鉴,愚者必自身碰壁方知觉。
最后一句最美吧.
泰戈尔的飞鸟集....
“我相信你的爱。”让这句话做我的最后的话。
Let this be my last word, that I trust thy love.
这些都是我以前上学时收集的,有的是诗有的是谚语,意思都不错,看着选吧
别 忘 ㄋ 追 加 分 哦
我的世界手机版不同版本可以联机,方法如下:1.打开游戏点击联机大厅。2.在联机大厅中点击本地地图。3.选择本地联机。4.打开本地联机后选择创建房间。5.选择最大人数后创建房间。6.点击右上角分享给好友即可邀请好友进行联机游戏。
我的世界手机版不同版本可以联机吗
详细答案:
我的世界手机版不同版本可以联机,方法如下:
1.打开游戏点击联机大厅。
2.在联机大厅中点击本地地图。
3.选择本地联机。
4.打开本地联机后选择创建房间。
5.选择最大人数后创建房间。
6.点击右上角分享给好友即可邀请好友进行联机游戏。
我的世界手机版不同版本可以联机吗
目前国内服由网易代理,则国内版我的世界各个版本之间可以任意联机。
我的世界多人联机服务器已经开发出符合自己的规则及习惯,由其超级管理员以及管理者进行管理。
可以在游戏中自由选择模式,在各种模式中体验不一样的玩法,在生存模式中享受打怪、冒险等多种玩法。该游戏以玩家在三维空间中自由地创造和破坏不同种类的方块为主题。
本文由阿里闲鱼技术团队逸昂分享,原题“消息链路优化之弱感知链路优化”,有修订和改动,感谢作者的分享。
闲鱼的IM消息系统作为买家与卖家的沟通工具,增进理解、促进信任,对闲鱼的商品成交有重要的价值,是提升用户体验最关键的环节。
然而,随着业务体量的快速增长,当前这套消息系统正面临着诸多急待解决的问题。
以下几个问题典型最为典型:
1) 在线消息的体验提升;
2) 离线推送的到达率;
3) 消息玩法与消息底层系统的耦合过强。
经过评估,我们认为现阶段离线推送的到达率问题最为关键,对用户体验影响较大。
本文将要分享的是闲鱼IM消息在解决离线推送的到达率方面的技术实践,内容包括问题分析和技术优化思路等 ,希望能带给你启发。
(本文已同步发布于: )
本文是系列文章的第6篇,总目录如下:
《 阿里IM技术分享(一):企业级IM王者——钉钉在后端架构上的过人之处 》
《 阿里IM技术分享(二):闲鱼IM基于Flutter的移动端跨端改造实践 》
《 阿里IM技术分享(三):闲鱼亿级IM消息系统的架构演进之路 》
《 阿里IM技术分享(四):闲鱼亿级IM消息系统的可靠投递优化实践 》
《 阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践 》
《 阿里IM技术分享(六):闲鱼亿级IM消息系统的离线推送到达率优化 》(* 本文)
从数据通信链接的技术角度,我们根据闲鱼客户端是否在线,将整体消息链路大致分为强感知链路和弱感知链路。
强感知链路由以下子系统或模块:
1) 发送方客户端;
2) idleapi-message(闲鱼的消息网关);
3) heracles(闲鱼的消息底层服务);
4) accs(阿里自研的长连接通道);
5) 接收方客户端组成。
整条链路的核心指标在于端到端延迟和消息到达率。
强感知链路中的双方都是在线的,消息到达客户端就可以保证接收方感知到。强感知链路的主要痛点在消息的端到端延迟。
弱感知链路与强感知链路的主要不同在于: 弱感知链路的接收方是离线的,需要依赖离线推送这样的方式送达。
因此弱感知链路的用户感知度不强,其核心指标在于消息的到达率,而非延迟。
所以当前阶段,优化弱感知链路的重点也就是提升离线消息的到达率。换句话说, 提升离线消息到达率问题,也就是优化弱感知链路本身 。
下图一张整个IM消息系统的架构图,感受下整体链路:
如上图所示,各主要组件和子系统分工如下:
1) HSF是一个远程服务框架,是dubbo的内部版本;
2) tair是阿里自研的分布式缓存框架,支持 memcached、Redis、LevelDB 等不同存储引擎;
3) agoo是阿里的离线推送中台,负责整合不同厂商的离线推送通道,向集团用户提供一个统一的离线推送服务;
4) accs是阿里自研的长连接通道,为客户端、服务端的实时双向交互提供便利;
5) lindorm是阿里自研的NoSQL产品,与HBase有异曲同工之妙;
6) 域环是闲鱼消息优化性能的核心结构,用来存储用户最新的若干条消息。
强感知链路和弱感知链路在通道选择上是不同的:
1) 强感知链路使用accs这个在线通道;
2) 弱感知链路使用agoo这个离线通道。
通俗了说,弱感知链路指的就是离线消息推送系统。
相比较于在线消息和端内推送(也就是上面说的强感知链路),离线推送难以确保被用户感知到。
典型的情况包括:
1) 未发送到用户设备:即推送未送达用户设备,这种情况可以从通道的返回分析;
2) 发送到用户设备但没有展示到系统通知栏:闲鱼曾遇到通道返回成功,但是用户未看到推送的案例;
3) 展示到通知栏,并被系统折叠:不同安卓厂商对推送的折叠策略不同,被折叠后,需用户主动展开才能看到内容,触达效果明显变差;
4) 展示到通知栏,并被用户忽略:离线推送的点击率相比于在线推送更低。
针对“1)未发送到用户设备”,原因有:
1) 离线通道的token失效;
2) 参数错误;
3) 用户关闭应用通知;
4) 用户已卸载等。
针对“3)展示到通知栏,并被系统折叠”,原因有:
1) 通知的点击率;
2) 应用在厂商处的权重;
3) 推送的数量等。
针对“4)展示到通知栏,并被用户忽略”,原因有:
1) 用户不愿意查看推送;
2) 用户看到了推送,但是对内容不感兴趣;
3) 用户在忙别的事,无暇处理。
总之: 以上这些离线消息推送场景,对于用户来说感知度不高,我们也便称之为弱感知链路。
我们的弱感知链路分为3部分,即:
1) 系统;
2) 通道;
3) 用户。
共包含了Hermes、agoo、厂商、设备、用户、承接页这几个环节。具体如下图所示。
从推送的产生到用户最终进入APP,共分为如下几个步骤:
步骤1 :Hermes是闲鱼的用户触达系统,负责人群管理、内容管理、时机把控,是整个弱感知链路的起点。;
步骤2 :agoo是阿里内部承接离线推送的中台,是闲鱼离线推送能力的基础;
步骤3 :agoo实现离线推送依靠的是厂商的推送通道(如:苹果的 apns通道 、Google的fcm通道、及 国内各厂商的自建通道 。;
步骤4 :通过厂商的通道,推送最终出现在用户的设备上,这是用户能感知到推送的前提条件;
步骤5 :如果用户刚巧看到这条推送,推送的内容也很有趣,在用户的主动点击下会唤起APP,打开承接页,进而给用户展示个性化的商品。
经过以上5个步骤,至此弱感知链路就完成了使命。
弱感知链路的核心问题在于:
1) 推送的消息是否投递给了用户;
2) 已投递到的消息用户是否有感知。
这对应推送的两个阶段:
1) 推送消息是否已到达设备;
2) 用户是否查看推送并点击。
其中: 到达设备这个阶段是最基础的,也是本次优化的核心。
我们可以将每一步的消息处理量依次平铺,展开为一张漏斗图,从而直观的查看链路的瓶颈。
漏斗图斜率最大的地方是优化的重点,差异小的地方不需要优化:
通过分析以上漏斗图,弱感知链路的优化重点在三个方面:
1) agoo受理率:是指我们发送推送请到的数量到可以通过agoo(阿里承接离线推送的中台)转发到厂商通道的数量之间的漏斗;
2) 厂商受理率:是指agoo中台受理的量到厂商返回成功的量之间的漏斗;
3) Push点击率:也就通过以上通道最终已送到到用户终端的消息,是否最终转化为用户的主动“点击”。
有了优化方向,我们来看看优化手段吧。
跟随推送的视角,顺着链路看一下我们是如何进行优化的。
用户的推送,从 Hermes 站点搭乘“班车”,驶向下一站: agoo 。
这是推送经历的第一站。到站一看,傻眼了,只有不到一半的推送到站下车了。这是咋回事嘞?
这就要先说说 agoo 了,调用 agoo 有两种方式:
1) 指定设备和客户端,agoo直接将推送投递到相应的设备;
2) 指定用户和客户端,agoo根据内部的转换表,找到用户对应的设备,再进行投递。
我们的系统不保存用户的设备信息。因此,是按照用户来调用agoo的。
同时: 由于没有用户的设备信息,并不知道用户是 iOS 客户端还是 Android 客户端。工程侧不得不向 iOS 和 Android 都发送一遍推送。虽然保证了到达,但是,一半的调用都是无效的。
为了解这个问题: 我们使用了agoo的设备信息。将用户转换设备这一阶段提前到了调用 agoo 之前,先明确用户对应的设备,再指定设备调用 agoo,从而避免无效调用。
agoo调用方式优化后,立刻剔除了无效调用,agoo受理率有了明显提升。
至此: 我们总算能对 agoo 受理失败的真正原因做一个高大上的分析了。
根据统计: 推送被 agoo 拒绝的主要原因是——用户关闭了通知权限。同时,我们对 agoo 调用数据的进一步分析发现——有部分用户找不到对应的设备。 优化到此,我们猛然发现多了两个问题。
那就继续优化呗:
1) 通知体验优化,引导打开通知权限;
2) 与agoo共建设备库,解决设备转换失败的问题。
这两个优化方向又是一片新天地,我们择日再聊。
推送到达 agoo ,分机型搭乘厂商“专列”,驶向下一站:用户设备。
这是推送经历的第二站。出站查票,发现竟然超员了。
于是乎: 我们每天有大量推送因为超过厂商设定的限额被拦截。
为什么会这样呢?
实际上: 提供推送通道的厂商(没错, 各手机厂商的自家推送通道良莠不齐 ),为了保证用户体验,会对每个应用能够推送的消息总量进行限制。
对于厂商而言,这个限制会根据推送的类型和应用的用户规模设定——推送主要分为产品类的推送和营销类的推送。
厂商推送通道对于不同类型消息的限制是:
1) 对于产品类推送,厂商会保证到达;
2) 对于营销类推送,厂商会进行额度限制;
3) 未标记的推送,默认作为营销类推送对待。
我们刚好没有对推送进行标记,因此触发了厂商的推送限制。
这对我们的用户来说,会带来困扰。闲鱼的交易,很依赖买卖家之间的消息互动。这部分消息是需要确保到达的。
同样: 订单类的消息、用户的关注,也需要保证推送给用户。
根据主流厂商的接口协议,我们将推送的消息分为以下几类,并进行相应标记:
1) 即时通讯消息;
2) 订单状态变化;
3) 用户关注内容;
4) 营销消息这几类。
同时,在业务上,我们也进行了推送的治理——将用户关注度不高的消息,取消推送,避免打扰。
经过这些优化,因为超过厂商限额而被拦截的推送实现了清零。
通过优化agoo受理率、厂商受理率,我们解决了推送到达量的瓶颈。但即使消息被最终送达,用户到底点击了没有?这才是消息推送的根本意义所在。
于是,在日常的开发测试过程中,我们发现了推送的两个体验问题:
1) 用户点击Push有开屏广告;
2) 营销Push也有权限校验,更换用户登陆后无法点击。
对于开屏广告功能,我们增加了Push点击跳过广告的能力。
针对Push的权限校验功能,闲鱼根据场景做了细分:
1) 涉及个人隐私的推送,保持权限校验不变;
2) 营销类的推送,放开权限校验。
以上是点击体验的优化,我们还需要考虑用户的点击意愿。
用户点击量与推送的曝光量、推送素材的有趣程度相关。推送的曝光量又和推送的到达量、推送的到达时机有关。
具体的优化手段是:
1) 在推送内容上:我们需要优化的是推送的时机和相应的素材;
2) 在推送时机上:算法会根据用户的偏好和个性化行为数据,计算每个用户的个性化推送时间,在用户空闲的时间推送(避免在不合适的时间打扰用户,同时也能提升用户看到推送的可能性)。
3) 在推送素材上:算法会根据素材的实时点击反馈,对素材做实时赛马。只发用户感兴趣的素材,提高用户点击意愿。
通过以上我们的分析和技术优化手段,整体弱推送链路链路有了不错的提升,离线消息的到达率相对提升了两位数。
本篇主要和大家聊的是只是IM消息系统链路中的一环——弱感知链路的优化,落地到到具体的业务也就是离线消息送达率问题。
整体IM消息系统,还是一个比较复杂的领域。
我们在消息系统的发展过程中,面临着如下问题:
1) 如何进行消息的链路追踪;
2) 如何保证IM消息的快速到达(见《 闲鱼亿级IM消息系统的及时性优化实践 》);
3) 如何将消息的玩法和底层能力分离;
4) 离线推送中如何通过用户找到对应的设备。
这些问题,我们在以前的文章中有所分享,以后也会陆续分享更多,敬请期待。
[1] Android P正式版即将到来:后台应用保活、消息推送的真正噩梦
[2] 一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践
[3] 一套亿级用户的IM架构技术干货(上篇):整体架构、服务拆分等
[4] 一套亿级用户的IM架构技术干货(下篇):可靠性、有序性、弱网优化等
[5] 从新手到专家:如何设计一套亿级消息量的分布式IM系统
[6] 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
[7] 融云技术分享:全面揭秘亿级IM消息的可靠投递机制
[8] 移动端IM中大规模群消息的推送如何保证效率、实时性?
[9] 现代IM系统中聊天消息的同步和存储方案探讨
[10] 新手入门一篇就够:从零开发移动端IM
[11] 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
[12] 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
[13] IM消息送达保证机制实现(一):保证在线实时消息的可靠投递
[14] IM消息送达保证机制实现(二):保证离线消息的可靠投递
[15] 零基础IM开发入门(一):什么是IM系统?
[16] 零基础IM开发入门(二):什么是IM系统的实时性?
[17] 零基础IM开发入门(三):什么是IM系统的可靠性?
[18] 零基础IM开发入门(四):什么是IM系统的消息时序一致性?
(本文已同步发布于: )
飏的意思是:飞扬;飘扬。
拼音:yáng
引证解释:
〈动〉
1、飞扬;飘扬
又如:飏尘(尘土飞扬);飏幕(风吹开帘幕);飏飏(飞翔的样子。即翩翩);飏空(在空中飘扬);飏簸(向上抛撒谷物,以扬出杂物);飏扇(古扬谷器)
2、通“扬”。扬举
又如:飏帆(船扬帆而进。同扬帆)
3、通“扬”。显扬
又如:飏菁(显扬华美);飏荣(显出美丽);飏累(因说好话而受牵连);飏金(以金箔装饰佛像)
4、通“扬”。扬声,大声
又如:飏言(扬声大言。同扬言);飏声(高声)
扩展资料
词语解释:
1、飏言
[yáng yán]
高声朗朗地讲话。多用于臣下奏辞。
2、飖飏
[yáo yáng]
摇曳摆荡。
3、习飏
[xí yáng]
习扬,飘扬。
4、赓飏
[gēng yáng]
亦作“赓扬”。谓飞扬轻举连续而歌。
5、鸿飏
[hóng yáng]
弘扬;发扬。
在以前的 《Flutter 上默认的文本和字体知识点》 和 《带你深入理解 Flutter 中的字体“冷”知识》 中,已经介绍了很多 Flutter 上关于字体有趣的知识点,而本篇讲继续介绍 Flutter 上关于 Text 的一个属性: FontFeature , 事实上相较于 Flutter ,本篇内容可能和前端或者设计关系更密切 。
什么是 FontFeature ? 简单来说就是影响字体形状的一个属性 ,在前端的对应领域里应该是 font-feature-settings ,它有别于 FontFamily ,是用于指定字体内字的形状的一个参数。
我们知道 Flutter 默认在 Android 上使用的是 Roboto 字体,而在 iOS 上使用的是 SF 字体,但是其实 Roboto 字体也是分很多类型的,比如你去查阅手机的 system/fonts 目录,就会发现很多带有 Roboto 字样的字体库存在。
所以 Roboto 之类的字体库是一个很大的字体集,不同的 font-weight 其实对应着不同的 ttf ,例如默认情况下的 Roboto 是不支持 font-weight 为 600 的配置 :
所以如下图所示,如果我们设置了 w400 - w700 的 weight ,可以很明显看到中间的 500 和 600 其实是一样的粗细,所以在 设置 weight 或者设计 UI 时,就需要考虑不同平台上的 weight 是否支持想要的效果 。
回归到 FontFeature 上,那 Roboto 自己默认支持多少种 features 呢? 答案是 26 种,它们的编码如下所示,运行后效果也如下图所示,从日常使用上看,这 26 种 Feature 基本满足开发的大部分需求。
而 iOS 上的 SF pro 默认支持 39 种 Features , 它们的编码如下所示,运行后效果也如下图所示,可以看到 SF pro 支持的 Features 更多。
所以可以看到,并不是所有字体支持的 Features 都是一样的,比如 iOS 上支持 sups 上标显示和 subs 下标显示,但是 Android 上的 Roboto 并不支持,甚至很多第三方字体其实并不支持 Features 。
有趣的是,在 Flutter Web 有一个渲染文本时会变模糊的问题 #58159 ,这个问题目前官方还没有修复,但是你可以通过给 Text 设置任意 FontFeatures 来解决这个问题。
最后,如果对 FontFeature 还感兴趣的朋友,可以通过一下资料深入了解,如果你还有什么关于字体上的问题,欢迎留言讨论。
基于网友的问题再补充一下拓展知识,毕竟这方面内容也不多 。
事实上在 dart 里就可以看到对应 FontWeight 约定俗称用的是字体集里的什么字体:
所以如果对于默认字体有疑问,可以在你的手机字体找找是否有对应的字体, 比如虽然我们说 roboto 没有 600 ,但是如果是 roboto mono 字体集是有 600 的 fontweight ,甚至还有 600 斜体: 。
另外注意这是 Flutter 而不是原生,具体实现调用是在 Engine 的 paragraph_skia.cc 和 paragraph_builder_skia.cc 下对应的 setFontFamilies 相关逻辑,当然默认字体库指定在 typography.dart 下就看到,例如 'Roboto' 、 '.SF UI Display' 、 '.SF UI Text' 、 '.AppleSystemUIFont' 、 'Segoe UI' :
另外如果你在 Mac 的 Web 上使用 Flutter Web,可以看到指定的是 .AppleSystemUIFont ,而对于 .AppleSystemUIFont 它其实不算是一种字体,而是苹果上字体的一种集合别称:
[图片上传失败...(image-40f5ce-1648368234737)]
还有,如果你去看 Flutter 默认自带的 cupertino/context_menu_action.dart ,就可以看到一个有趣的情况:
当然,前面我们说了那么多,主要是针对英文的情况下,而在中文下还是有差异的 ,之前的文章也介绍过:
例如,在苹果上的简体中文其实会是 PingFang SC 字体,对应还有 PingFang TC 和 PingFang HK 的繁体集,而关于这个问题在 Flutter 上之前还出现过比较有意思的 bug :
当然后续的 #16709 修复了这个问题 ,而在以前的文章我也讲过,当时我遇到了 “Flutter 在 iOS 系统上,系统语言是韩文时,在和中文一起出现会导致字体显示异常" 的问题 :
解决方法也很简单,就是给 fontFamilyFallback 配置上 ["PingFang SC" , "Heiti SC"] 就可以了,这是因为韩文在苹果手机上使用的应该是 Apple SD Gothic Neo 这样的超集字体库,【广】这个字符在这个字体集上是不存在的,所以就变成了中文的【广】;
所以可以看到,字体相关是一个平时很少会深入接触的东西,但是一旦涉及多语言和绘制,就很容易碰到问题的领域 。