https://gravatar.cat.net/avatar/08cf681fb7c6ad1b4fe70a8269c2103c?s=96&d=mp&r=g

LengYue's Blog

0.0

给LengYue's Blog打分

start start start start start

感谢您打了2

详情

全站展示位

Android工作线程之间的消息传递以及工作线程与主线程之间消息的传递 |

这个是一个android的简单案例: 界面的部分主要有三个按钮组成,这里将不再赘述 他们之间的消息传递方法将会在代码中体现,其中对重要步骤进行了详细的注释。。。。

推荐

Android清除本地数据缓存代码 |

/* 文 件 名: DataCleanManager.java 描 述: 主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清 除自定义目录 */

在AndroidManifest.xml文件中的android:windowSoftInputMode属性使用| keyboard,squeezing,layout |

The AndroidManifest.xml File <activity android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] …… > </activity>

搭建为知笔记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 配置云存储 默认笔记是保存在本地的,你可以使用本地+云同步的方式,或者像我一样直接使用云储存, 配置阿里OSS

IOS的专利?Android也能流畅实现毛玻璃效果效果 |

背景介绍 上图就是我们在IOS设备上经常能够见到的毛玻璃(高斯模糊)效果。不得不说,这种效果在适合的场景下使用,能够获得绝佳的美感。但是鉴于Android设备性能和兼容性问题,我们通常很难在Android设备上见到这种效果。 但这并不是IOS的专利效果,Android也能轻松流畅的实现。本篇文章将会详细的讲解如何实现。 Android中的高斯模糊 我为什么选择RenderScript实现高斯模糊 目前Android设备上实现高斯模糊效果的方式通常有: 云端处理,移动客户端直接从网络获取处理好的图片。这种方式局限性很大。 FastBlur等开源库。这种方式兼容性不错,但是效率极低。 c实现。不懂c的理解困难。 OpenGL实现。效果很好,但电量和内存消耗比较高。 RenderScript实现。效果略弱于第4种,但是使用方便,速度很快,性能消耗在可接受范围内,加上Google的兼容性解决方案,可以说是能够作为优先考虑的方式。 RenderScript RenderScript主要在android中的对图形进行处理,RenderScript采用C99语法进行编写,主要优势在于性能较高。在Api11的时候被加入到Android中。同时,Google提供了android.support.v8.renderscript兼容包,能够实现更低版本的兼容。 RenderScript提供了一个用于实现高斯模糊的封装类ScriptIntrinsicBlur ,这货在Api17才被收编Android所以在不使用兼容包的情况下只能兼容到4.2的设备。但是,我们有兼容包啊向下兼容不是梦。 准备阶段 ###引入兼容包 方法很简单,只需在build.gradle中加入: defaultConfig { 。 。 。 //就是这么简单 renderscriptTargetApi 19 renderscriptSupportModeEnabled true } 你以为这样就好了?nonono。 由于一些坑人的厂商会深度定制Android系统,所以一些必要的依赖文件会被它们直接去掉!!这导致一些型号的设备上调用RenderScriptd的部分方法时会报错。所以我们得加上这些可能丢失的文件。 其实也简单,打开android_sdk/build-tools/选择19以上版本/renderscript/lib/packaged我们可以看见3个包含.os文件的文件夹。 直接复制这三个文件加到项目工程的jniLibs 包下。什么?找不见jniLibs包?自己建一个喽。 注意,这时候,我们很可能遇到一个崩溃,找不到.os文件。莫慌莫慌… 在build.gradle的android{}中加入: sourceSets { main { jniLibs.srcDirs = ['libs'] } } 没完没了!最后一步只针对使用的混淆的同学,需要在混淆中加入: -keep class android.support.v8.renderscript.** { *; } 实现高斯模糊 终于可以开始写代码了。先来看看效果。下图高斯模糊半径逐渐增大的效果,请忽略渣渣录屏效果 将ScriptIntrinsicBlur封装成工具类。咱们代码里接着款 import android.support.v8.renderscript.*; //这句很重要啊,v8包的,不然不能向下兼容啊。 public class RenderScriptGaussianBlur { private RenderScript rs; public RenderScriptGaussianBlur(Context context) { // 创建RenderScript内核对象 this.

心灵鸡汤

我的高考故事

文/王超

2020年的高考就要来了,作为一个高考的“过来人”,那个属于自己的高考是难忘的,心怀感激的。

21年前,我还是一名19岁的高三学生,发生了一件至今我记忆犹新的事。有一天我应同学之邀,一起去看望一位曾经教过我们的语文老师。到了之后,大家有说有笑,聊得很开心。

“你今年要走,我看,有点儿危险!”薛老师一边把一个削好的苹果递给我,一边微笑着对我说,语气里充满关心与担心。那一刻,听到她对我的“点评”,我只觉脑中突然“轰”的一响,眼前也随之一片黑暗。“她怎么能这样说别人呢?”我在心里愤愤地说着。可是,我清楚地知道,她说话向来是有几分依据的。她曾在初中教过我们一年,对自己学生的能力、潜力了如指掌。但是我极不明白,自己一向尊敬喜欢的薛老师,为什么要在关键时刻对我说那样的话,她难道没有考虑过会对我产生怎样的影响吗?

我没有想太多。只是从那次之后,更不知疲倦地做自己应该做且能做好的事:努力,进步;再努力,再进步……终于,那年夏天,我考上了大学,而且成绩高出分数线不少。一块无形的巨石终于从心头落下,我终于解放了!“黑暗的高三,见鬼去吧!”心中反复恨恨地喊着,“薛老师,你不是说你的学生今年要走有点儿危险吗?哈哈……真不好意思,学生让你失望了!”

不知过了多久,不知飘飘然了多久,突然之间,我开始问自己:你考上了大学,是怎样考上的呢?“你今年要走,我看,有点儿危险!”21年后的今天,已是不惑之年的我又想起了老师曾经说过的那句“狠话”。但是,现在的我终于明白了她的真正用意。当时的一句话,既让我看到希望又让我感到压力,无形中成为我高考路上的牵引力和推动力,让我努力拼搏,勇往直前,堂堂正正迈进大学校门。

薛老师,你知道吗?就是你那一激,使当年的我有了一个倔强而奇怪的想法——“一定要考上大学,绝不能让老师的话应验!考上大学,看她还有什么话说!”我抛除一切杂念,安心学习,只想着自己多努力点就会有进步,坚信有付出就一定有收获。靠着这股“执拗”劲一路前行,我终于获得了成功。亲爱的薛老师,请原谅学生的无知,曾对您一时的误解吧!

尼采曾说:“如果你低估一个水手的能力,那么就祝他一帆风顺吧!”2020年高考,我只想对参加高考的蓬勃而可爱的青年说一句:“你为自己高考而流的每一滴汗水一定不会辜负你!加油!”

列表展示

主站展示位

使用 GoMobile 创建 Android、iOS 跨平台 WebSocket Library |

GoMobile 是 Go 语言的扩展,将 Go 代码编译为可在移动设备上运行的静态库或动态库,可在 iOS 和 Android 平台上使用。本文介绍如何使用 GoMobile 创建 Android 应用并在其中调用 Go 语言 WebSocket。 安装 GoMobile go install golang.org/x/mobile/cmd/gomobile@latest 创建 Go WebSocket 库 首先创建一个 Go WebSocket 服务端: mkdir go-websocket cd go-websocket go mod init go-socket // 使用 gomobile 初始 gomobile init 如果你无法使用 gomobile init 请检查 GOBIN 是否加入环境变量 我们使用在go 中广泛使用的gorilla/websocket来创建websocket服务端: go get github.com/gorilla/websocket 编写WebSocket服务端代码: package socket import ( "flag" "log" "net/

慧极必伤,情深不寿,强极则辱,谦谦君子,温润如玉 |

慧极必伤,情深不寿,强极则辱,谦谦君子,温润如玉: 这是金先生<书剑>里,乾隆送陈家洛佩玉上的刻字。大意:一个人太聪明智慧便会对自己有损伤,过于沉迷和执着的感情不会持续长久,过于突出的人势必会受到屈辱,君子应该如玉一般的温润沉稳,含蓄坚毅,不张扬,却自显价值。 金庸在《书剑恩仇录》中,借乾隆送陈家洛佩玉上之刻字,道出自己人生特别推崇的境界,正是这四句十六字。 但很有意思的是,如此佳句居然没有人能查其出处(人们都认为其境界颇深定有出处)。有人查遍孔孟老庄,以及四书五经,均无所获,故将此难题贴于网上,一年多来终无所获,故被称为“武侠与国文的一个绝题”。其中,最接近的答案是《国风·秦风·小戎》里有“言念君子,温其如玉。”,《易经》第十五卦中有“谦谦君子”,但仅此而已。 金庸“谦谦君子,温润如玉”之说不知其出处,但从《书剑》所蕴涵的他早期的人生 理想来看,这似乎是金庸所推崇的一种人生境界。 飞扬跳脱的个性不属于谦谦君子,因为,玉的光芒是凛于内而非形于外的。雍容自若的神采,豁达潇洒的风度,不露锋芒,不事张扬,无大悲大喜,无偏执激狂,生命的状态在这里呈现出一种成熟的圆润。 佛家有一个词,圆融,是跟这种成熟的圆润颇为相似的境界。是以佛家讲求戒嗔、戒痴、戒贪,无欲无求,尔后能不动声色、不滞于心。谦谦君子的圆润亦同此理。 而要达到这种境界是需要修炼的。修炼是一个很奇妙的词语,人生在世实质上就是一个修炼的过程,只不过并不是人人都可以修成正果。 修成佛、修成仙是尘世之人遥不可及的梦想,但磨去棱角、收敛光华、修成谦谦君子却并非太难的事情。容人之量是修成谦谦君子的前提。斤斤计较、小肚鸡肠修不成君子,开阔的心胸、通透的眼光,才是君子的气量。 于是,我们常常可以看到这样的人,荣损得失面前,总能一笑置之。正所谓,宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。 剑有双刃,谦谦君子亲切柔和,少了无拘无束的冲动莽撞,却也少了率性率真的刚猛豪放。正如一个人磨砺的过程一样,成熟的获得是以天真童趣的无可追回为代价的。 当然,“情深不寿,强极则辱”的背后,似乎也透着一种淡淡的无奈。试想,人活一世,谁人不想追求恒久?只是恒久不可强求,于是退一步海阔天空。这何尝不是一种迂回的战术、以求得宛转的余地?谁能说这种淡淡的无奈不是一种生存的智慧。

GetX Router 设置返回值 |

通过别名导航: var result = await Get.toNamed(Routes.WEB_VIEW, arguments: { "url": item?.link ?? "", "index": index, "collect": item?.collect ?? false, }); 返回值: Get.back(result: {"collect": collect.value}); 完整代码: () async { /// 导航到新的界面 var result = await Get.toNamed(Routes.WEB_VIEW, arguments: { "url": item?.link ?? "", "index": index, "collect": item?.collect ?? false, }); /// 接收返回值 bool collect = result["collect"]; }

RecyclerView里notifyItemRemoved的坑 |

RecyclerView很多时候是展示静态的数据,并不会有删除的操作,讲到RecyclerView时,会提到它提供了一个很好的展现删除操作动画的函数,代码片段一般是这样的 @Override public void onBindViewHolder(final CommonViewHolder holder, final int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { contentList.remove(position); notifyItemRemoved(position); } }); } 这样写的话,很快会产生数据删除错乱和超出索引异常导致崩溃。 原因是函数里面的传入的参数position,它是在进行onBind操作时确定的,在删除单项后,已经出现在画面里的项不会再有调用onBind机会,这样它保留的position一直是未进行删除操作前的postion值。 对于尚未进入画面的单项来说,它会使用新的position值,这个值是正确的,如果在单项里加上下面的代码 holder.textView.setText(contentList.get(position) + "#" + String.valueOf(position)); 在删除第一屏的一项后,向上滚动,会发现新滚上来的一行和它上面的一行的textview显示是一样的。 解决办法也很简单 先remove,再notifyItemRemoved, 最后再notifyItemRangeChanged remove:把数据从list中remove掉, notifyItemRemoved:显示动画效果 notifyItemRangeChanged:对于被删掉的位置及其后range大小范围内的view进行重新onBindViewHolder

Vue watch中调用this时出现undefined问题 |

记录一下在 Vue 学习使用时候的遇到的问题 在watch侦听器中,想要调用methods中的方法 applicationId: (val)=> { if (val) { this.getAppConfig(val) } } 结果提示: Error in callback for watcher "applicationId": "TypeError: Cannot read property 'getAppConfig' of undefined" 查了官方的资料才知道。改成这样就可以了:

Flutter |

琥珀之月,空谷之兰,皆是孤芳,既是孤芳,但求自赏便罢!

利用Android源码,轻松实现汉字转拼音功能 |

今天和大家分享一个从Android系统源代码提取出来的汉字转成拼音实现方案,只要一个类,560多行代码就可以让你轻松实现汉字转成拼音的功能,且无需其他任何第三方依赖。

Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存? |

!!! 原文出处:  0、写在前面本文涉及到屏幕密度的讨论,这里先要搞清楚 DisplayMetrics 的两个变量,摘录官方文档的解释: density:The logical density of the display. This is a scaling factor for the Density Independent Pixel unit, where one DIP is one pixel on an approximately 160 dpi screen (for example a 240x320, 1.5”x2” screen), providing the baseline of the system’s display. Thus on a 160dpi screen this density value will be 1; on a 120 dpi screen it would be .75; etc. This value does not exactly follow the real screen size (as given by xdpi and ydpi, but rather is used to scale the size of the overall UI in steps based on gross changes in the display dpi.

未命名 |

她是江南一带有名的妓 他是战功显赫的将军 前几日他失去妻子 在歌妓面前喝的烂醉 把妓当成她 第二天看到床上的落红 将军嘲笑妓 终究是婊子 他穿衣离去 妓九岁被卖到青楼 几年来只卖艺不卖身 直到那晚遇到他 她羞涩 笨拙 把自己给了他 他凶狠 粗鲁 嘴里叫着妻子的名字 妓只喜欢了这一个人 却喜欢了一辈子 将军在外战沙场 歌姬城内待他归 将军入城 从不多看一眼 只是在深夜敲开她的房门 他在外时日久 她抱着他褪下他的衣服 细数他身上的疤痕 他抱她上床 没有情话 只有缠绵 她轻触他疤痕 你娶我吧 我想给你一个家 将军穿好衣服起身离去 留她一人愣愣的 看他离去的方向 做妓的最怕有了感情 可她偏偏中了这世间最愁的毒 妓说 我不想再做这行了 那夜她主动寻他 月光下她红色的唇格外迷人 那夜她用尽万种风情 将军你吻我 将军毫不动意 一夜缠绵 她离去 妓知道将军不会寻她 毕竟她只是个妓 一日为妓 终身为娼 不久将军带兵出征 两军交战 在敌方的主帅身旁发现一身红衣的她 她一身红衣依靠在另一个男人怀里 将军满眼尽是讽刺 战争的号角吹响 她藏在袖中的匕首直刺敌将心脏 敌将并不惊讶 像是早已预料 将军愣住 这是她第一次看到他除了冷漠意外的表情 战火硝烟 她闭上双眼 妓知道 他安全了 从此以后他都安全了 她可以放心了 也总算帮了他一次

Java服务器端的Servlet的生命周期 |

servlect生命周期,核心与接口: servlect生命周期的主要阶段: 1.创建servlect对象的创建 servlect岁创建的?什么时候创建的? servlect由web创建,默认在请求第一次到达servlect时创建。若请求在次访问该servlect,tomcat不会新创建servlect对象,还是使用第一次创建的servlect方法去执行该业务。所以servlect是单例的。每一个请求使用的servlect都是同一个。所以会出现线程并发的安全问题。servlect是线程非安全的。

Connection with adb was interrupted.解决办法 |

[2012-10-16 10:49:35 – My First App] [2012-10-16 10:49:35 – My First App] Android Launch! [2012-10-16 10:49:35 – My First App] Connection with adb was interrupted. [2012-10-16 10:49:35 – My First App] 0 attempts have been made to reconnect. [2012-10-16 10:49:35 – My First App] You may want to manually restart adb from the Devices view.

Sophie’s World |

生命本没有意义,你要能给他什么意义,他就有什么意义。与其终日冥思苦想人生有何意义,不如试用此生做点有意义的事。 ——苏菲某天放学回家,收到了神秘的一封信。 ——你是谁? ——世界从何而来?  从此,她的生活彻底改变,在一位神奇的哲学老师艾伯特的指引下,她开始思索,从苏格拉底到柏拉图,从黑格尔到马克思,从文艺复兴到浪漫主义,各位大师所思考 的根本问题。与此同时,苏菲不断收到一个自称是少校的人的神秘信件,,并托她转达给一个叫席德的人。可苏菲并不认识这个叫席德的人。世界像谜团一样展现在 苏菲眼前,她运用少女天生的悟性与后天的知识,企图解开这些谜团,然而,事实真相远比她所想的更离奇,更怪异……在艾伯特的指引下,他们发现自己仅仅是少 校写的一本为自己女儿席德生日而送的书中的人物,他们所做的一切,包括思考的一切都被少校用笔写了下来,他们不过是少校大脑中的一丝电磁波罢了。换句话 说,苏菲和艾伯特,以及他们那个世界中的一切,全部都是不存在的,是虚无的!可就是这样一个虚构的人物,竟然也有自己的思想,他们企图脱离书本,不再受少 校的摆控。终于,在席德将苏菲的故事看到最后一页时,他们成功的逃离了书本,来到了一个叫永恒之乡的世界。这是一个与现实世界相对位的地方,这个世界的人 都拥有永恒的生命。他们可以看到听到现实世界的一切,但现实世界的人却永远也无法感受到他们的存在。永恒之乡的人都是像苏菲和艾伯特一样,是从某个虚构的 股市中跑出来的人物。此时少校和席德正在草地上仰望星空,谈人生,谈宇宙,而苏菲正在某个角落默默地注视着他们……  这个故事看似匪夷所 思,实则发人深省,看完后我们不禁要问——人生的意义是什么?在苏菲的世界中,他们的一切都是虚无的,不存在的。他们所有的思想动作以及所发生的一切事 情,都是少校所安排好的,少校在那个世界中无所不能,仿佛就是他们的上帝一样。因为少校就是创造他们世界的人。可事实上,少校和席德不也是虚构的人物吗? 他们所做的一切不都是作者乔斯坦·贾德所安排好的吗?我们所看到的席德,就像席德看到的苏菲一样,而贾德,就是席德他们那个世界的上帝吧?再放眼我们现在 所处的这个世界,这应该是相对于我们的“现实世界”吧?那是不是存在这样一个“上帝”,我们的所作所思,都是这位上帝所安排好了的呢?那这样我们的存在岂 不是毫无意义的吗?那这位上帝之上,是否还有一位上帝呢……  其实,每个人都是一个思维的个体,而相对于我们而言,自己的命运是要靠自己把 握的。尽管我们的未来可能就像戏剧一样早已被上帝写进了剧本,可是只要我们认为自己是存在的,不就足够了吗?正如苏菲和艾伯特将要离开他们那个世界时一 样,艾伯特对大家说;“在座的没有一个人会想念我们,因为你们根本就不存在,你们无法用任何器官来想念我们。”当即立刻有人反驳道:“你凭什么说我们不存 在?我努力赚钱,养活我的家人,过上幸福的生活,我很快乐!可你到头来却说我不存在?”的确,按理说他只是虚构的,的确是不存在,可如果映射到我们这个世 界,岂不是同样没有人存在?引入一个概念前必先引入其相反的一个概念,既然一切都“不存在”,那又何来“存在”的概念呢?所以,或许我们不存在,可那只是 相对上帝而言的,我们只须抓住这如星尘般稍纵即逝的瞬间,以自己的方式,度过人生,那就足够了。或许每当天空中有星尘散落时,那一定是某个小说中的人物从 他那所谓不存在的世界中脱离出来了,他会在某个角落,默默地注视着我们…… 人生如梦。 梦即现实。

Flutter |

琥珀之月,空谷之兰,皆是孤芳,既是孤芳,但求自赏便罢!

Don’t Store Data in the Application Object |

There is always some information that is needed in many places in your app. It can be a session token, the result of an expensive computation, etc. It is often tempting to avoid the overhead of passing objects between activities or keeping those in persistent storage. A pattern that is sometimes suggested is to dump your data in the Application object with the idea that it will be available across all activities.

Android调用手机中的应用市场 |

public static void goToMarket(Context context, String packageName) { Uri uri = Uri.parse("market://details?id=" + packageName); Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri); try { context.startActivity(goToMarket); } catch (ActivityNotFoundException e) { e.printStackTrace(); } }

清除目录下的SVN信息 |

在项目开发和日常文档管理时,用到了SVN,由于要把一些文档发给同事,这时想删除SVN版本信息文件,于是上网在SVN中文论坛找到了一份资料: 删除 .svn 文件 在linux下 删除这些目录是很简单的,命令如下 find . -type d -name “.svn”|xargs rm -rf 或者 find . -type d -iname “.svn” -exec rm -rf {} ; 在windows下用以下法子: 1、在项目平级的目录,执行dos命令: xcopy project_dir project_dir_1 /s /i project_dir 为你的项目目录 原理是复制可见文件 .svn是隐藏目录 不会复制 3、添加注册表(亲自动手测试过) 可以将“快速删除SVN版本信息”命名增加到资源管理器的右键上,这样,鼠标点两下就能把选中目录下的所有.svn目录干掉了。 代码为: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellDeleteSVN] @=”快速删除SVN版本信息” [HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellDeleteSVNcommand] @=”cmd.exe /c D:工具批处理文件删除SVN版本信息.bat” 将这段代码保存为一个.reg文件,双击确认导入注册表中不完整,后来自己手工添加。注意:文件“批处理文件删除SVN版本信息.bat”不能放 在有空格的文件夹下,确认删除时请看一下当前目录不要删除不该删的目录下的SVN版本信息。不知道怎么改进“cmd.exe /c D:工具批处理文件删除SVN版本信息.bat”。 批处理文件删除SVN版本信息.bat文件内容如下: @echo off echo *********************************************************** echo 清除SVN版本信 息 echo *********************************************************** :start ::启动过程,切换目录 :set pwd=%cd% :cd %1 echo 工作目录是:& chdir :input ::获取输入,根据输入进行处理 set source=: set /p source=确定要清楚当前目录下的.

我问佛 |

我问佛:为何不给所有女子羞花闭月的容颜? 佛曰:那只是昙花的一现,用来蒙蔽世俗的眼,没有什么美可以抵过一颗纯净仁爱的心,我把它赐给每一个女子,可有人让它蒙上了灰。 我问佛:世间为何有那么多遗憾? 佛曰:这是一个婆娑世界,婆娑即遗憾,没有遗憾,给你再多幸福也不会体会快乐。 我问佛:如何让人们的心不再感到孤单? 佛曰:每一颗心生来就是孤单而残缺的,多数带着这种残缺度过一生,只因与能使它圆满的另一半相遇时,不是疏忽错过,就是已失去了拥有它的资格。

RxJava操作符分类 |

ReactiveX的每种编程语言的实现都实现了一组操作符的集合。不同的实现之间有很多重叠的部分,也有一些操作符只存在特定的实现中。每种实现都倾向于用那种编程语言中他们熟悉的上下文中相似的方法给这些操作符命名。 本文首先会给出ReactiveX的核心操作符列表和对应的文档链接,后面还有一个决策树用于帮助你根据具体的场景选择合适的操作符。最后有一个语言特定实现的按字母排序的操作符列表。 如果你想实现你自己的操作符,可以参考这里:实现自定义操作符 创建操作 用于创建Observable的操作符 Create — 通过调用观察者的方法从头创建一个Observable Defer — 在观察者订阅之前不创建这个Observable,为每一个观察者创建一个新的Observable Empty/Never/Throw — 创建行为受限的特殊Observable From — 将其它的对象或数据结构转换为Observable Interval — 创建一个定时发射整数序列的Observable Just — 将对象或者对象集合转换为一个会发射这些对象的Observable Range — 创建发射指定范围的整数序列的Observable Repeat — 创建重复发射特定的数据或数据序列的Observable Start — 创建发射一个函数的返回值的Observable Timer — 创建在一个指定的延迟之后发射单个数据的Observable 变换操作 这些操作符可用于对Observable发射的数据进行变换,详细解释可以看每个操作符的文档 uffer — 缓存,可以简单的理解为缓存,它定期从Observable收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个 latMap — 扁平映射,将Observable发射的数据变换为Observables集合,然后将这些Observable发射的数据平坦化的放进一个单独的Observable,可以认为是一个将嵌套的数据结构展开的过程。 roupBy — 分组,将原来的Observable分拆为Observable集合,将原始Observable发射的数据按Key分组,每一个Observable发射一组不同的数据 ap — 映射,通过对序列的每一项都应用一个函数变换Observable发射的数据,实质是对序列中的每一项执行一个函数,函数的参数就是这个数据项 can — 扫描,对Observable发射的每一项数据应用一个函数,然后按顺序依次发射这些值 indow — 窗口,定期将来自Observable的数据分拆成一些Observable窗口,然后发射这些窗口,而不是每次发射一项。类似于Buffer,但Buffer发射的是数据,Window发射的是Observable,每一个Observable发射原始Observable的数据的一个子集 过滤操作 这些操作符用于从Observable发射的数据中进行选择 Debounce — 只有在空闲了一段时间后才发射数据,通俗的说,就是如果一段时间没有操作,就执行一次操作 Distinct — 去重,过滤掉重复数据项 ElementAt — 取值,取特定位置的数据项 Filter — 过滤,过滤掉没有通过谓词测试的数据项,只发射通过测试的 First — 首项,只发射满足条件的第一条数据 IgnoreElements — 忽略所有的数据,只保留终止通知(onError或onCompleted) Last — 末项,只发射最后一条数据 Sample — 取样,定期发射最新的数据,等于是数据抽样,有的实现里叫ThrottleFirst Skip — 跳过前面的若干项数据 SkipLast — 跳过后面的若干项数据 Take — 只保留前面的若干项数据 TakeLast — 只保留后面的若干项数据 组合操作 组合操作符用于将多个Observable组合成一个单一的Observable

博客寄语:

    从14年开始写博客,到现在再有2年就10年了。

实时播报:

博客号-学习成长

相信每一分耕耘都有每一分收获,致力帮助博客主所创作的博客能更快的被收录! 如果有其它需求,可联系下方邮箱。