Android 声明式 UI 框架 Litho 初探 —— Layout

Litho底层使用的是Yoga,Yoga是Facebook的另一个开源项目,它是一个跨iOS、Android、Windows平台在内的布局引擎,兼容Flexbox布局方式。 所以只要熟悉Flexbox布局,那么在使用Litho进行UI布局时基本毫无压力。 如果熟悉Flutter开发,那在使用Litho时,会有一些似曾相识的感觉,Litho中的 Row 与 Column 相关属性与Flutter中的 Row 与 Column 几乎无二。 本来想写一点示例代码,但是感觉没什么可写的。下面这个链接是Yoga 官网的playground。 https://yogalayout.com/playground 你可以通过它可视化的调整UI,构建你需要的layout。同时可以生成相应的Litho代码 在线可视化构建UI: 直接生成的Litho代码: 在 Flexbox 中可以通过 positionType(ABSOLUTE)属性来实现Android 中的 FrameLayout效果: @OnCreateLayout fun createLayout(c: ComponentContext): Component { return Column.create(c) .child( SolidColor.create(c) .color(Color.MAGENTA) .widthDip(100f) .heightDip(100f) ) .child( Text.create(c) .text("FrameLayout") .marginDip(YogaEdge.TOP, 30f) .positionType(YogaPositionType.ABSOLUTE) ) .build(); } 运行效果:

九月 6, 2020 · 1 分钟 · LengYue

Android声明式UI框架 Litho 初探 —— MountSpec的使用

Mount Specs Mount Specs 用来生成渲染具体View或者Drawable的组件。 Mount spec 必须使用@MountSpec注解来标注,并至少实现一个标注了@onCreateMountContent的方法。 Mount Spec相比于Layout Spec更复杂一些,它拥有自己的生命周期: @OnPrepare,准备阶段,进行一些初始化操作。 @OnMeasure,负责布局的计算。 @OnBoundsDefined,在布局计算完成后挂载视图前做一些操作。 @OnCreateMountContent,创建需要挂载的视图。 @OnMount,挂载视图,完成布局相关的设置。 @OnBind,绑定视图,完成数据和视图的绑定。 @OnUnBind,解绑视图,主要用于重置视图的数据相关的属性,防止出现复用问题。 @OnUnmount,卸载视图,主要用于重置视图的布局相关的属性,防止出现复用问题 Android 小伙伴应该对上面这几个状态比较熟悉 这里引用一张美团技术博客的图: 下面这个代码,只是一个单纯的ColorDrawable,你也可以替换成你需要实习的View 例如 ImageView: /** * 挂载操作有一个非常类似于Android的RecyclerView Adapter的API。 * 它有一个 onCreateMountContent 方法,用于在回收池为空时创建和初始化 View 和 Drawable 内容 onMount 使用当前信息对复用的内容进行更新。 * * 预分配 * 当挂载 MountSpec 组件时,其 View 或 Drawable 内容需要从回收池中初始化或重用。 * 如果池为空,那么将创建一个新实例,这可能会使UI线程过于繁忙并丢弃一个或多个帧。为了缓解这种情况,Litho 可以预先分配一些实例并放入回收池中。 * */ @MountSpec(poolSize = 0, canPreallocate = true, isPureRender = true) class MainColorViewSpec { private const val TAG = "MainColorViewSpec" // onCreateMountContent 的返回类型应该始终与 onMount 的第二个参数的类型匹配。它们必须是 View 或 Drawable 子类。参数在构建时进行校验。 // onCreateMountContent 不能接收 @Prop 或任何带有其他注解的参数。 @OnCreateMountContent fun onCreateMountContent(context: Context): ColorDrawable { Log....

九月 5, 2020 · 2 分钟 · LengYue

Android声明式UI框架 Litho 初探 ——两种数据类型

Litho中包含的的两种数据类型 Litho的两种属性分别是: 不可变属性称为Props 可变属性称为State 不可变属性Props 定义和使用props Props属性:Component中使用@Prop注解的参数集合,具有单向性和不可变性,可以在左右的方法中访问它的指。在同一个Component中我们可以定义和访问相同的prop 下面这个例子,定义了两个Prop,一个string类型text,一个int类型index,text的注解中optional = true表示它是一个可选参数。 当Component的生命周期方法被调用的时候,@Prop参数会保存component创建时从它们的父级传递过来的值(或者它们的默认值) 设置props prop参数其实在前几篇文章中都有使用过,用起来也没有什么特别的地方,这里不在赘述,制作一个简单的说明。 Component中的prop参数会在编译时候自动加入到Builder中,以上面的代码举例: PropComponent.create(c).index(10)./*text("测试文本").*/build() Prop的默认值 对于可选的Prop如果不设置值,就是java的默认值。或者你也可以使用@PropDefault注解然后添加默认值。 如果你使用Kotlin,那还需要加上@JvmFiel把该字段编辑为public才行。 @MountSpec object PropComponentSpec { @JvmField @PropDefault val prop1 = "default" @JvmField @PropDefault val prop2 = -1 资源类型 在Android开发中,我们经常会限定参数的类型。比如: fun doSomething(@ColorInt color: Int, @StringRes str: Int, @DimenRes width: Int){} 在Compontent的Prop中也有类似的操作,具体看代码: fun onMount( c: ComponentContext, textView: TextView, @Prop(optional = true,resType = ResType.STRING) text: String?...

九月 5, 2020 · 2 分钟 · LengYue

Android声明式UI框架 Litho 初探——基础使用

初衷 Litho作为一个高性能的UI引擎,学习曲线还是比较高的,但是在国内能用的资料非常少(大部分都是相互复制的”Hello Word“教程),国外除了Litho自己的文档外,也没有太多教程。这几篇教程也是我边学边写。如果有那里理解不到位的地方,欢迎指正。 Litho 是什么 Litho是一个用于在Android上构建高效用户界面(UI)的声明性框架。但不同以往的UI框架,它的底层是Yoga,它通过将不需要交互的UI转换为Drawable来渲染视图,通过Yoga来完成组件布局的异步或同步(可根据场景定制)测量和计算,实现了布局的扁平化。加速了UI渲染速度 在Litho中,使用组件(Component)来构建UI,而不是直接与传统的Android视图进行交互。组件本质上是一个函数,它接受不可变的输入(称为属性 props),并返回描述用户界面的组件层次结构。 如果有Flutter开发经验,那么Litho的开发方式有点类似 接下来的教程都将结合代码进行讲解 基础配置 gradle apply plugin: 'kotlin-kapt' dependencies 中加入 // Litho implementation 'com.facebook.litho:litho-core:0.37.1' implementation 'com.facebook.litho:litho-widget:0.37.1' kapt 'com.facebook.litho:litho-processor:0.37.1' // SoLoader implementation 'com.facebook.soloader:soloader:0.9.0' // For integration with Fresco implementation 'com.facebook.litho:litho-fresco:0.37.1' // Sections implementation 'com.facebook.litho:litho-sections-core:0.37.1' implementation 'com.facebook.litho:litho-sections-widget:0.37.1' compileOnly 'com.facebook.litho:litho-sections-annotations:0.37.1' kapt 'com.facebook.litho:litho-sections-processor:0.37.1' 初始化SoLoader.Litho依赖,SoLoader用于加载底层布局引擎Yoga SoLoader.init(this, false); 使用基础Component Component Specs Litho中的视图单元叫做Component,可以直观的翻译为组件 组件分为两种类型 : Layout Spec:将其他组件组合到特定的布局中。这相当于 Android 上的 ViewGroup 。...

九月 5, 2020 · 1 分钟 · LengYue

vSphere, ESXi 和 vCenter 的区别

update:2020年03月26日 经理了一番折腾之后,最终公司、家里都安装上PVE了,没错就是PVE。虽然最开始特别想使用ESXI。 首先说一下之前的误解,KVM的界面是非常难看的,没想到这个基于KVM的PVE其实还好。UI还不错。 再有,ESXI不知道何故在联想的电脑上装上去打不开,UEFI BOIS 都试过了,网上的几种方法试了还是不行,在家里机器上试了一会下轻松装上~~。 最后不得不说,PVE真香~内存占用方面,最先版PVE 6.1基于Debian 9 ,内存方面控制的很好!! 最近准备把家里之前的Windows + Vmware 的服务器,物理机虚拟化。考虑了ESXI、PVE、XEN。 首先感觉XEN比较老,有点落伍,PVE 核心也是 KVM。所以最后无非就是在 ESXI 和 PVE 里选 这两个都没问题的。 最后选了ESXI。不选KVM主要是界面丑。真的丑。 Vmware 用的最多的应该是虚拟机了。刚开始 Vmware vSphere、EXSi、vCenter 搞得有点蒙。所以查资料了解了一下 vSphere 和他的组件。 首先弄清楚 vSphere,EXSi 和 vCenter 的区别是很重要的。我先在VMware Workstation 中安装了 vSphere。 vSphere是一个属于数据中心产品的软件套件。vSphere就像微软 Office 套装一样拥有许多产品,比如 Office,Excel等。vSphere同样也包括很多软件组件,比如 vCenter、ESXi、vSphere client 等等。所以这些软件的合集,就叫做vSphere。vSphere不是一种你可以安装和使用的软件,它仅仅是一个软件套件的合集。 ESXi、vSphere client 和 vCenter 都是 vSphere 的部件。ESXi server是最重要的部分,ESXi是一个一类虚拟化管理器(type 1 hypervisor)。所有的虚拟机或者客户机操作系统都安装在 ESXi 服务器上,同时,你可能还需要vSphere中的其他部件– vSphere client 或者 vCenter。管理员可以通过 vSphere client 连接 ESXi 服务器来访问或者管理虚拟机。vSphere client 是用来从客户端机器连接 ESXi 执行任务的。所以,现在的问题是,vCenter是什么?我们为什么需要他?我们完全可以通过 vSphere client来克隆虚拟机,而不需要 vCenter server。...

三月 18, 2020 · 1 分钟 · LengYue

搭建为知笔记Docker版,以及注意事项

好久没有关注为知笔记了,最近考虑迁移笔记的时候,看了一下各大笔记应用,开源笔记要么不支持全平台,要么客户端完善度或者同步问题不行。突然发现为知笔记支持docker版,可以自己部署,客户端还是使用官方客户端。 安装docker docker version > /dev/null || curl -fsSL get.docker.com | bash service docker restart 启动为知笔记docker 创建文件夹,跟官方保持一致,我们也在主目录创建文件 cd ~ mkdir wizdata 启动,如果你打算使用nginx,或者配置ssl,则需要把端口调整一下。比如我的6789 docker run --name wiz --restart=always -it -d -v ~/wizdata:/wiz/storage -v /etc/localtime:/etc/localtime -p 80:80 -p 9269:9269/udp wiznote/wizserver 接下来会自动下载并运行,喝杯咖啡,等一下就可以了。 或者,可以在这个时候配置Nginx 配置Nginx 开启SSL ssl_certificate XXX/fullchain.pem; #你的证书地址 ssl_certificate_key XXX/privkey.pem; #你的证书地址 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5:!EXP; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; error_page 497 https://$host$request_uri; OK 配置完成之后,打开你的域名,或者你的IP:端口,比如 http://127.0.0.1:6789 ,默认管理员账号:admin@wiz.cn,密码:123456 配置云存储 默认笔记是保存在本地的,你可以使用本地+云同步的方式,或者像我一样直接使用云储存, 配置阿里OSS...

三月 13, 2020 · 1 分钟 · LengYue

android 10 [API 29]适配指南

Android 11[API 30]已经发布正式版,来看看全新的 android 11 [api 30] 适配指南 非SDK接口 google 针对非SDK接口的限制 非SDK接口检测工具 官方给出了一个检测工具,下载地址:veridex veridex使用方法: appcompat.sh --dex-file=apk.apk blacklist、greylist、greylist-max-o、greylist-max-p含义 以上截图中,blacklist、greylist、greylist-max-o、greylist-max-p含义如下: blacklist 黑名单:禁止使用的非SDK接口,运行时直接Crash(因此必须解决) greylist 灰名单:即当前版本仍能使用的非SDK接口,但在下一版本中可能变成被限制的非SDK接口 greylist-max-o: 在targetSDK<=O中能使用,但是在targetSDK>=P中被禁止使用的非SDK接口 greylist-max-p: 在targetSDK<=P中能使用,但是在targetSDK>=Q中被禁止使用的非SDK接口 设备ID 从Android 10开始已经无法完全标识一个设备,曾经用mac地址、IMEI等设备信息标识设备的方法,从Android 10开始统统失效。而且无论你的APP是否是配过Android 10。 IMEI等设备信息 从Android10开始普通应用不再允许请求权限android.permission.READ_PHONE_STATE。而且,无论你的App是否适配过Android Q(既targetSdkVersion是否大于等于29),均无法再获取到设备IMEI等设备信息。 受影响的API Build.getSerial(); TelephonyManager.getImei(); TelephonyManager.getMeid(); TelephonyManager.getDeviceId(); TelephonyManager.getSubscriberId(); TelephonyManager.getSimSerialNumber(); targetSdkVersion<29 的应用,其在获取设备ID时,会直接返回null targetSdkVersion>=29 的应用,其在获取设备ID时,会直接跑出异常SecurityException 如果您的App希望在Android 10以下的设备中仍然获取设备IMEI等信息,可按以下方式进行适配: <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="28" /> Mac地址随机分配 从Android10开始,默认情况下,在搭载 Android 10 或更高版本的设备上,系统会传输随机分配的 MAC 地址。(既从Android 10开始,普通应用已经无法获取设备的真正mac地址,标识设备已经无法使用mac地址) 唯一ID的替代 Google给出的解决方案是:如果您的应用有 追踪非登录用户重装 的需求,可用ANDROID_ID来标识设备。 ANDROID_ID的生成规则为:签名+设备信息+设备用户 ANDROID_ID重置规则:设备恢复出厂设置时,ANDROID_ID将被重置 String androidId = Settings....

十二月 9, 2019 · 1 分钟 · LengYue

怎么评价三毛和她的书

台湾作家白先勇说,他是当年第一个发现三毛文学天赋的人。所谓当年,指的是1961年,那时他主编文学刊物《现代文学》,有个朋友给他带了篇三毛的文章《惑》。他看故事生动,文字漂亮,稍做改动后发在《现代文学》上。 《惑》发表后,三毛抱着一本《现代文学》一路狂奔回家,躲在屋里激动地泪流满面。这年她正十八,以此为分水岭,写作生涯正式开始。 客观来说,三毛有一定的文学天赋,也算纸落云烟,落落才女。但就像历代民窑的瓷器,虽然也还出彩,但毕竟还没到稀世的地步,比起白先勇这样的文学大家,还差着0.8个张爱玲。 很多年以后,张颐武说:三毛的主要成就不在文学,而在生活方式。 这也解释了为什么三毛在文学成就上平淡无奇,但仍然成为中国人气最高的女作家之一。 三毛卖得最好的书是《撒哈拉的故事》,这本书畅销三十余年,每年在中国的销量,大于或等于全国文青的数量。在亚马逊的销量榜,它始终霸占着前五十名,压得白先勇的《台北人》和张爱玲的《金锁记》永世不得翻身。 在这本书还没诞生的时候,中国民间四大爱情故事,分别是牛郎织女、孟姜女哭长城、白蛇传、梁山伯与祝英台。但自从有了《撒哈拉的故事》,这种阵列就变成了牛郎织女、白蛇传、梁山伯与祝英台,以及三毛和荷西。 1973年,三毛和荷西在非洲沙漠小镇阿尤恩结婚,并生活了三年。 阿尤恩并不是一个旅游城市,除了沙漠,既没有自然风光,也没有人文古迹。愿意买一万多的机票飞到这里,并逗留超过20小时的中国游客,绝对都是冲着三毛来的。 在定房网站上,阿尤恩有五家酒店可供选择,只有一家是四星级,叫帕拉多尔酒店。它的价格尽管比其他酒店翻几倍,但三毛的粉丝一定会冒着未来整个月吃土的风险,毫不犹豫地下单。就因为这家酒店的前身,是三毛在《撒哈拉的故事》中屡次提到的“西班牙国家旅馆”。 四十多年过去,这里的餐厅布置,还是三毛文章中描写的模样。角落仍放着一架法国RAMEAU三角钢琴,黑色漆面,老旧如冰裂纹。酒店外不远处就是沙漠,几十米高的无垠沙带,在暗夜如成群巨象夜奔。即便你有勇气奔向三毛以前骑骆驼的地方,路口持枪军人铁青的脸,也会立马击碎你一触即溃的流浪情怀。 在阿尤恩以西距西海岸线130公里处,加纳利群岛有着人类能想到的一切美景。那里四季如春,沙丘洁白,海水澄亮。尽管它只是距离西班牙本土1100公里,位于大西洋深处的一群小岛,但每年游客达到1500万,占到西班牙外国游客总数的三分之一。 这1500万人里的中国游客,也基本都是被三毛和荷西的故事忽悠来的。 加纳利群岛中的拉帕尔玛岛,以空气质量闻名世界,天空干净到一尘不染,吸引着世界各地的天文学家都来这里观测星空。 三毛挚爱的荷西,就长眠于此,存年28岁。 在圣克鲁兹市的市政府,荷西的一生言简意赅:出生时间1951年10月9号,已婚。死亡时间1979年9月30日,原因,潜水。 照这个资料算,三毛比荷西大8岁,而在她自己的叙述里,她只大了荷西6岁。果然作家都是天生的谎言家,即便是写日记,都不可能完全忠于事实。 1978年,35岁的三毛接到台湾音乐人李泰祥的邀请,赶写一些歌词。三毛一晚连写九首,李泰祥最中意的,是其中一首《小毛驴》。这首歌词来自于三毛十年前的记忆,那时候她流浪到西班牙,见到许多小毛驴在原野上奔跑,阳光如金粉敷在它们的背上,一切如童话般烂漫。 她在歌词里写道: 为什么流浪/流浪远方 为了了小⽑驴 为了西班⽛的姑娘 为了西班牙的大眼睛 而后,三毛将这首词以五百块的价格卖断。在制作中,李泰祥觉得歌名《小毛驴》太像儿歌,就改成了《橄榄树》,并将写到小毛驴的几句歌词改成了: 为什么流浪/流浪远方 为了天空飞翔的⼩⻦ 为了山间清流的⼩溪 为了宽阔的草原 这个版本,最终呈现在齐豫的专辑《橄榄树》里。三毛听到后,怨冲冲地说了句:如果流浪只是为了看天空飞翔的小鸟和大草原,那就不必去流浪也罢。 心理学的书上讲:当人碰到极大冲击的时候,会把自己的一生从头算起。 三毛一生最大的打击,发生到荷西死去的1979年。那一年她36岁,人生由此从头算起,某种意义上,也像是生命的倒计时。 作家陈若曦曾写过一篇《乔琪》,讲述一个画画的少女最终自杀。他曾偷偷跟白先勇说,我写的其实就是三毛。 三十年后,三毛真的自杀了。 小时候,三毛有一次骑脚踏车掉进一口废井里,双膝跌得能看见骨头,她也不喊疼也不叫救命,就说了句:咦,烂肉裹的一层油原来就是脂肪,好看好看! 中国民间有某种预言的智慧,三岁看大,七岁看老,一个人的命运皆因性格使然。在三毛年轻的时候,就已经有前辈隐约猜到了她的结局。 三毛的一生,基本就在干两件事,受伤,疗伤。她像一只飞鸟,一生喜欢自由翱翔。鸟类里,有一种鸟叫天堂鸟,羽毛极其美丽,它们为了自己的羽毛不被吹乱,都喜欢逆风飞行。三毛就像是这种鸟,为了生命的灿艳,可以不惜逆风的代价。 在传说里,这种鸟只会落地一次,就是它死亡的时候。 荷西喜欢潜水,也死于潜水,像是在完成关于鱼的隐喻。如果要说得寓言一点,三毛和荷西之间,是关于飞鸟和鱼的相爱,诚然传奇,但注定短暂。荷西等了三毛6年,两人在一起也是6年,从相识到分离,仅一个轮回而已。 只是拉帕尔马岛政府的人,从没读懂过三毛和荷西。在巴洛文托海岸,也就是荷西意外死去的地点,他们竖了一块有史以来最难看的纪念碑来纪念三毛。纪念碑由三根钢铁塑成的头发组成,以此象征“三毛”。他们哪怕肯动一点脑子,也该知道对于中国人而言,三毛绝不是拿着三根头发就能象征的作家。 他们还在三根头发下布置了八块大鹅卵石,因为他们听说八在中国是个好数字。但他们没有花点心思去了解,八在中国用得最多的是“八八发”,那只是一个庸俗的求财愿望。这个设计跟三毛连一毛钱关系都没有,他们如此敷衍,只是想利用三毛的故事敛财罢了。 荷西死后,三毛还谈过几场恋爱,大家最熟知的是她和王洛宾的恋情。三毛遇见王洛宾时,王洛宾已经77岁。马尔克斯说,心灵的爱情在腰部以上,肉体的爱情在腰部往下。三毛和王洛宾相差30岁,很明显属于心灵式的爱情,这其实比肉体式的爱情更难。 被爱情冲昏头脑的三毛或许未曾细想,王洛宾尽管才气纵横,但就像是一只隐忍、负重的骆驼。他因政治原因两次入狱,有18年的光阴是在牢狱中度过,待平反时已经是68岁。她的一生是流浪的一生,而王洛宾的一生是禁锢的一生。 在牢狱里,一个从小就被带进监狱的小姑娘,监狱看守给她的一颗蚕豆,她视若珍宝,把它转赠给王洛宾说:这是世界上最好吃的东西。王洛宾的就为了这颗蚕豆泪流不止,那是他在牢狱里仅有的温暖。 这就是王洛宾,他一生的看过的风景、背负的伤痕,与如飞鸟的三毛不同,也与如鱼的荷西不同。他已经老了,没有时间,也没有能量,更没有必要还用余生去赌一场风花雪月。 三毛与王洛宾之间,好像除了他们最喜欢的歌词都被人篡改过,两人再找不到任何相同的地方。 1997年,齐豫发行专辑《骆驼·飞鸟·鱼》,这个名字,像是隐喻了三毛与她人生中最重要的两个男人。 时间退到1991年。三毛离开王洛宾,从新疆回到台北,就像是一条被沥水的毛巾,荷西的永逝抓着这头,王洛宾的疏离抓着那头,两头一起使劲地绞,终于把她的情感绞得一滴不剩。剩下的日子,生亦何欢,死亦何惧。 这年1月4日,三毛身穿白底红花睡衣,用尼龙丝袜上吊而死,现场没有任何遗书。 王洛宾听闻噩耗,大悲大醉,写下一首《等待》: 你曾在橄榄树下等待再等待 我却在遥远的地方徘徊再徘徊 人生本是一场迷藏的梦/且莫对我责怪 为把遗憾赎回来/我也去等待 每当月圆时/对着那橄榄树独自膜拜 三毛的生命,永远定格在了48岁。从此,在那遥远的地方,再没有她这样的姑娘。五年后,王洛宾病逝,享年83岁。 回顾三毛的一生,她13岁开始谈恋爱,一直谈到生命尽头。她不是那种一棵树上吊死的人,即便是荷西死后,她还在马不停蹄地寻找新的爱情。只是一生中可以爱很多人,但心疼的只有一个荷西。 她并不算漂亮,无非性格洒脱一点。她也不是高雅脱俗的女艺术家,每次写稿也十分计较稿费多少,也偶尔小自恋一把,放话说,在台湾,只有三个女人能驾驭波西米亚风的打扮,潘越云、齐豫,还有我。这些其实都没什么特别,三毛之所以是三毛,只是因为她比其他女人活得更热烈,热烈得像六月的太阳,你要靠近她,都会被烘得面皮发烫。 如七堇年说,一般人的感情就像杯酒,来人碰洒了一半,就把杯子扶起,用水兑满,留给第二个人。第二个人又碰洒了,继续扶起,用水兑满,留给第三个人,越往后感情是越淡的。 而我在三毛身上读出的是另一种玩法,三毛的酒,若来人碰洒了一半,她留给第二个人的酒,则以心血重酿,绝不兑水。第二杯再洒了,第三杯酒仍旧重酿,如此往复。她可以忍受伤害,但无法忍受淡薄,她要活就一定活得浓烈到化不开,要么爱,要么死。 如她所说:我自倾杯,君且随意。 据三毛的母亲缪进兰回忆,三毛在医院自杀前对她说:医院里有很多小孩在我床边跳来跳去,有的已长出翅膀来。 她只好哄三毛:也许小天使来守护你了。 三毛当时笑了一声。那一声,缪进兰事后想起来,觉得无比凄凉。 人的一生没有必要做一个绝对的无神论者,我有时也相信宗教里说的,生命的归属处有地狱天堂,命运里有不可抗拒的力量在引领人的灵魂去另一个国度修行。三毛走的时候,应该是上帝派了天使来接她。 在《雨季不再来》中,三毛写道:我今日担着如此的重担,下辈子一样希望拥抱一个血肉模糊的人生。 这像是她提前写好的遗书,鸟儿落地了,该歇息了。 转载自公众号:在下行之 本文采用:BY-NC 协议进行授权,如转载请尊重版权。

十月 29, 2019 · 1 分钟 · LengYue