草庐IT

android - 谷歌 Agera 与 rxAndroid

coder 2023-12-26 原文

当我第一次涉足 Android 中的响应式编程时,我发现了世界上许多开发人员都喜欢的 rxJavarxAndroid。但是今天我发现了另一个名为Agera的图书馆。仍在维护过程中的谷歌(最后一次提交是 2 个月前)。

乍一看很像 rxJava,但是有更有意义的 api 名称,可以帮助我轻松理解响应式编程。更重要的是,Google 的出色开发人员正在他们的项目 (Google Play Movies) 中使用它,我相信这是有原因的。

我想知道 Google Agera 是否应该更轻量级?与 rxJava 和 rxAndroid 相比性能如何?有没有大公司在生产中使用它?我需要学习它才能理解 Android 中的响应式编程吗?

最佳答案

来自 David Karnok(RxJava 维护者)的一个很好的比较可以在 issues on Github 中找到。 .

我浏览了文档,我的印象是 Agera 几乎是与第 0 代紧密联系的第 1 代响应式(Reactive)库。换句话说:

  • 第 0 代是当您拥有带有或不带有实际值的 addListener/removeListener 和 update() 时。 java.util.Observable 和大多数 GUI 框架可以被认为是第 0 代。用它们制作一个可组合的原生库是可能的,尽管通常很麻烦。

  • 第一代是 Microsoft 人员在大约 2009 年发明的。这是一个向上的步骤,具有简单的架构和出色的可组合性。然而,他们的概念在 2013 年末发现了一些缺点。示例:Rx.NET、Reactive4Java

  • 第二代是目前的 RxJava 1.x。它修复了同步取消问题,引入了一些可选的背压和提升到链中的概念。
  • 第三代是 Reactive-Streams 计划,具有充实的标准化 API,设计于 2015 年左右。该架构是带有背压的响应式(Reactive)推送。例如 Reactor 1、2 和 Akka-Streams。
  • 第 4 代是该领域的前沿。它建立在 Reactive-Streams 的基础上,并以运算符融合的形式添加了一个自适应推拉选项,允许高效的同步和异步使用。示例是 Reactor 2.5。 (RxJava 2.x 现在介于 3 和 4 之间)。

我知道这是一个可选库,如果你不喜欢就不要使用它。不要误会我的意思,这不是关于你有多少个运算符(operator),你的响应式(Reactive)库与底层平台的内联有多强大,或者你不关心 GUI 中的背压。它是关于 Rx 系列的架构经验、陷阱和可能性,它们可能会帮助/启发这个库。如果 Agera 是基于 Reactive-Streams 或以其精神设计的,我会说好吧,为什么不呢。

至于原来的问题:

Isn't it RxJava reinvented?

没有。

Is it supposed to be more light-weight?

看起来很 API-vise,不确定性能-vise

Complementary?

作为一般基于 addListener 的 API 的补充。 Observable 和 Supplier 的名称冲突可能会带来一些不便。

Or just inspired?

显然不受 Rx 的启发。

Google Play Movies and we like to open source code whenever possible

我看到了 Netflix 的脚步。你看,他们一路上得到了重要的帮助......

关于android - 谷歌 Agera 与 rxAndroid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730699/

有关android - 谷歌 Agera 与 rxAndroid的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  3. ruby - 从谷歌开发者网站下载后,client_secret.json 为空 - 2

    我正在尝试从googleAPI下载client_secret.json。我正在执行https://developers.google.com/gmail/api/quickstart/ruby中列出的步骤.使用此向导在GoogleDevelopersConsole中创建或选择项目并自动启用API。在左侧边栏中,选择同意屏幕。选择电子邮件地址并输入产品名称(如果尚未设置),然后单击“保存”按钮。在左侧边栏中,选择凭据并点击创建新客户端ID。选择应用程序类型已安装应用程序,已安装应用程序类型为其他,然后单击“创建客户端ID”按钮。点击新客户端ID下的下载JSON按钮。将此文件移动到您的工作

  4. 用于下载私有(private)谷歌文档的 Ruby 脚本 - 2

    我想用Ruby编写脚本(使用gdatagem、rest-clientgem或直接使用Net::HTTP)使用gmail-userid/password对我的google文档进行身份验证,然后下载私有(private)列表文件和文件。GDatadocuments指南清楚地说明了如何获取公开可见的文档,但不清楚我如何在我的脚本中验证自己的身份以访问私有(private)文档。authenticationmethodstheyspecify所有这些似乎都需要人工干预,要么使用验证码,要么使用某种形式的OAuth/OpenID重定向。有什么方法可以只使用用户名/密码组合来访问我的私有(priv

  5. ruby - 获取谷歌搜索结果的正确方法是什么? - 2

    我想在google上获取特定关键字搜索的所有搜索结果。我已经看到了抓取的建议,但这似乎是个坏主意。我见过Gems(我计划使用ruby​​)进行抓取并使用API。我还看到了使用API的建议。有谁知道现在最好的方法吗?API不再受支持,我看到有人报告说他们取回了无法使用的数据。Gems是否有助于解决这个问题?提前致谢。 最佳答案 我也选择了抓取选项,它比向谷歌询问key和加号更快,而且您每天的搜索查询不限于100次。正如理查德指出的那样,谷歌的服务条款是一个问题。这是我做过的一个对我有用的例子——如果你想通过代理连接,它也很有用:req

  6. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  7. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  8. ruby-on-rails - 谷歌地图、Ruby on Rails、用一个标记缩放级别 - 2

    我正在使用apneadiving/Google-Maps-for-Rails添加googlemaps支持(感谢awesomegem)但是,我发现了一个小故障,这很可能是我的错。当有多个标记时,auto_zoom效果很好。但是,当只有一个标记时,它会放大到不漂亮的最大级别。“缩放”仅在auto_zoom为false时有效,所以这不是我想要的。因此您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。有解决办法吗?我的解释有道理吗?这是GoogleMapsAPI的限制吗?谢谢... 最佳答案 此行为是由于goog

  9. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

  10. Android Gradle 7.1+新版本依赖变化 - 2

    前一段时间由于工作需要把可爱的小雪狐舍弃了,找到了小蜜蜂。但是新版本的小蜜蜂出现了很多和旧版本不一样的位置。1.功能位置迁移,原来在工程build.gradle的buildscript和allprojects移动至setting.gradle并改名为pluginManagement和dependencyResolutionManagement。里面的东西依旧可以按照原来的copy过来。pluginManagement{repositories{gradlePluginPortal()google()mavenCentral()}}dependencyResolutionManagement{r

随机推荐