Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缓存一个可完成的?

缓存一个可完成的?
EN

Stack Overflow用户
提问于 2017-01-14 10:25:54
回答 2查看 562关注 0票数 1

我正在尝试RxJava,我发现了一个小问题,我不知道如何处理。我在我的应用程序中使用的是google地图API,所以当创建包含地图的片段时,我必须调用

代码语言:javascript
运行
AI代码解释
复制
mGoogleMapFragment.getMapAsync(OnMapReadyCallback)

这将在准备使用map时调用一个回调方法。看起来这是一个很好的地方,可以使用RxJava来表示地图已经准备好了,我可以在上面做一些工作。因此,我从下面的内容开始:

代码语言:javascript
运行
AI代码解释
复制
    mMapReadySignal = Single.<GoogleMap>fromEmitter(objectEmitter -> {
        OnMapReadyCallback callback = googleMap -> {
            mMap = googleMap;
            objectEmitter.onSuccess(googleMap);
        };
        getMapAsync(callback);
    }).cache();

调用缓存是为了禁止发生多次订阅-我只想订阅一次。

然后我在另外两个观察点中使用了这个单曲:

代码语言:javascript
运行
AI代码解释
复制
    mMapReadySignal
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe((googleMap) -> {
                LatLng place = new LatLng(52,0, 20.0);
                mMap.moveCamera(CameraUpdateFactory.zoomTo(13.0f));
                mMap.moveCamera(CameraUpdateFactory.newLatLng(place));
            }));

代码语言:javascript
运行
AI代码解释
复制
    MyRetrofitInterface.getMarkedPlaces()
            .zipWith(mMapReadySignal.toObservable(), (markedPlaces, ignore) -> markedPlaces)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    markedPlaces -> showOnMap(markedPlaces),
                    Throwable::printStackTrace));

看起来不错,但可以看起来更好-我没有使用mMapReadySignal返回的anywhere对象。那么为什么不让它成为一个可完成的呢?

代码语言:javascript
运行
AI代码解释
复制
    mMapReadySignal = Completable.fromEmitter(objectEmitter -> {
        OnMapReadyCallback callback = googleMap -> {
            mMap = googleMap;
            objectEmitter.onCompleted();
        };
        getMapAsync(callback);
    });

这是问题所在。我不能在可完成的对象上调用缓存,所以我最终得到的结果是mMapReadySignal被订阅了两次。这绝对不是我想要的!我怎样才能把这个可完备性转换成缓存呢?有什么办法吗?

哦,是的--我一直在考虑将这个"moveCamera可观察性“移动到completable的发射器的主体上。然而,这不是我的问题的解决方案,因为这将为bug创造一个机会-如果我移除所有mMapReadySignal的订户,没有人会订阅它,因此我最终会得到一个没有摄像头移动到我想要的位置的googleMap;

EN

回答 2

Stack Overflow用户

发布于 2017-01-14 17:55:00

因为Completable不会发出任何东西(没有onNext),所以它没有缓存的意义(没有要缓存的事件)。

但是,您可以通过使用Completable.toObservable()方法将Completable传输到Observable,然后使用Observable.cache()缓存此Observable,然后再次将其传输到Completable来实现这一点。您还可以使用操作创建Observable,对其进行缓存,然后使用toCompletable()调用transfer to completable

票数 1
EN

Stack Overflow用户

发布于 2017-01-24 21:45:04

你不应该需要缓存一个可完成的。

代码语言:javascript
运行
AI代码解释
复制
final Completable c = Completable.fromAction(new Action0() {
    @Override
    public void call() {

    }
});

c.observeOn(Schedulers.computation()).subscribe(new Action0() {
    @Override
    public void call() {
        Log.d("X", "A");
    }
});

try {
    Thread.sleep(2000);
} catch (InterruptedException e) {}

c.observeOn(Schedulers.io()).subscribe(new Action0() {
    @Override
    public void call() {
        Log.d("X", "B");
    }
});

打印“A”,然后在两秒钟后打印“B”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41648929

复制
相关文章
通过分布式缓存实现缓存可伸缩
缓存是改善网站性能的最重要手段,一方面缓存使用内存存储数据,可以更快速地响应请求;另一方面大量数据访问请求通过缓存返回,减少数据库压力,进一步改善性能 目前网站中大量使用的缓存服务是 Memcache
dys
2018/04/02
7670
通过分布式缓存实现缓存可伸缩
.NET4.0的可扩展缓存系统
.NET Framework中,叫做System.Runtime.Caching,这不仅是个缓存库,还是个框架,可以在上面开发自己的库。ObjectCache定义了所有缓存都要实现的通用操作。与之搭配
张善友
2018/01/19
7520
.NET4.0的可扩展缓存系统
关于缓存更新的一些可借鉴套路
目前随着缓存架构方案越来越成熟化,通常做法是引入「缓存」来提高读性能,架构模型就变成了这样:
架构精进之路
2021/11/08
3220
关于缓存更新的一些可借鉴套路
可提高 page,可跳过缓存,微博无 cookie 爬虫网站更新
前阵子发布了 带 ip 属地,无 Cookie 微博话题自助抓取网站上线,可以实现脱离 Python 环境,直接在浏览器上抓取最新微博话题数据。
月小水长
2022/12/07
4260
可提高 page,可跳过缓存,微博无 cookie 爬虫网站更新
开发一个可维护的程序
晚上回家的时候跟同事聊起来一些编程的工具。主要是三个东西「MVC」「Gitflow」和「unittest」。最近开发的一个程序正好这三个都在用,深感对于开发出一个可维护的程序来说这三者的重要。 MVC 是什么? MVC 是 model view controler 三者的缩写。 Model 是数据模型,业务逻辑和业务规则,一般成品后不会改变,比如博客里的文章,注意发布、回收、评论等虽然也是对数据的操作,但也被归到 model 里面,一般表现为类的方法。 View 是视图,对用户而言只有 view 是可见的,
王兵
2018/06/14
5700
聊聊从web session的共享到可扩展缓存设计
先从web session的共享说起 许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务。这个问题对于系统规模来说,从小到大可能面临的难度会相差很大。但对于原理来说其实就是需要准备备份系统随时可以替代正在服务的系统,也就是无论何时都有服务器可以提供服务。也就是灾备系统或者负载均衡。 提供灾备系统或者负载均衡系统都需要面临一个问题,那就是如何解决共享数据的问题。对于web服务器而言首先要解决的就是web session共享问题,比如A服务器
用户1105954
2018/01/12
6630
聊聊从web session的共享到可扩展缓存设计
Clickhouse一个查询是如何完成的?
Parser和Interpreter是非常重要的两组接口:Parser负责创建AST对象,Interpreter解释器则负责解释AST,并进一步创建查询的执行pipeline。它们与IStorage一起,串联起了整个数据查询的过程。
felixxdu
2021/07/30
2.4K0
可帮助完成集体决策的人工智能系统上线
美国卡耐基梅隆大学发布消息称,可辅助集体决策的人工智能系统已经上线。 有争议的总统选举可能引起人们关于当下投票制度能否选出最佳候选人这一问题的质疑。尽管美国人的投票方式不会发生任何改变,但有一项新的在线服务RoboVote.org可使任何人都能使用最先进的投票方法,从而做出最佳群体决策。 RoboVote是卡耐基梅隆大学和哈佛大学共同开展的一个项目。它的作用不仅仅是汇总选票,因为所有在线调查工具都已经具备了这个功能。该网站由人工智能驱动,并结合了数十年社会选择研究智慧,以最佳方式结合意见、喜好和兴趣以促成集
人工智能快报
2018/03/07
8940
HTTP 缓存别再乱用了!推荐一个缓存设置的最佳姿势!
设置缓存大家可能大家都是从性能角度去考虑的,但是如果你不注意或者稍微设置不当,缓存也可能对我们的网站的安全性和用户隐私造成负面影响。
ConardLi
2022/04/08
6180
HTTP 缓存别再乱用了!推荐一个缓存设置的最佳姿势!
设计一个缓存策略,动态缓存热点数据
LRU是一种常见的算法,假如我们设定TOP10的热点数据,那么我们可以规定LRU容量为10,当容量没有满的时候,我们可以直接放入,当满了的时候我们就将最后一个排除然后引入最新的放在首部
才疏学浅的木子
2022/11/28
1.1K0
设计一个缓存策略,动态缓存热点数据
如何最快的完成一个Web产品的开发?
2020年春节回东北的路上凌晨四点多诞生了一个想法,然后就开始吭哧坑次设计开发,基于我以前开发的 ServiceFramework 框架,一个春节假期就迭代开发出了一套名为 web-platform 框架。 该框架包含三个部分:
用户2936994
2022/07/21
6530
如何最快的完成一个Web产品的开发?
使用Vue完成一个checklist
这里封装了一个storage.js,用于保存数据至本地,这样下次打开页面还是会恢复至上次关闭的时候。
zx钟
2019/07/18
9900
guava缓存批量获取的一个坑
Guava Cache是Google开源的Java工具集库Guava里的一款缓存工具,一直觉得使用起来比较简单,没想到这次居然还踩了一个坑。
方丈的寺院
2019/10/17
1.3K0
guava缓存批量获取的一个坑
推荐一个代码自动完成的工具AutoCode
本文转载:http://www.cnblogs.com/xiaoxiangfeizi/archive/2012/07/24/2605884.html
跟着阿笨一起玩NET
2018/09/18
2.1K0
推荐一个代码自动完成的工具AutoCode
Qt中国象棋四——显示棋子可移动位置/项目完成
1,求出8个待选位置,8个位置的偏移是(-2,-1)(-2,1)(2,-1)(2,1)
用户5908113
2019/11/18
8620
Qt中国象棋四——显示棋子可移动位置/项目完成
如何设计一个本地缓存
最近在看 Mybatis 的源码,刚好看到缓存这一块,Mybatis 提供了一级缓存和二级缓存;一级缓存相对来说比较简单,功能比较齐全的是二级缓存,基本上满足了一个缓存该有的功能;当然如果拿来和专门的缓存框架如 ehcache 来对比可能稍有差距;本文我们将来整理一下实现一个本地缓存都应该需要考虑哪些东西。
java思维导图
2019/12/05
7100
如何创建一个可复用的网页爬虫
网页爬虫是个非常有趣的玩具。不过不好玩的是,我们需要根据不同网页上的元素不断的调整自己的代码。这就是为什么我要着手实现一个更好的网页爬虫项目——通过该项目可以以最少的更改实现对新网页的爬取。
出其东门
2020/08/17
1.6K0
如何创建一个可复用的网页爬虫
如何设计一个缓存函数
在项目中你有优化过自己写过的代码吗?或者在你的项目中,你有用过哪些技巧优化你的代码,比如常用的函数防抖、节流,或者异步懒加载、惰性加载等。
Maic
2022/07/28
4530
如何设计一个缓存函数
从头完成一个restful API 服务
“ 昨天搭建了一个HTTPS的服务器,放在那里不用简直是浪费了,今天来部署一个RESTFul API服务”
周萝卜
2019/07/17
7800
从头完成一个restful API 服务
点击加载更多

相似问题

可完成的RxSwift缓存运算符

11

使将来的java可完成缓存原子化。

19

清漆:可缓存但不缓存

13

可缓存和可搜索的支持

15

如何在流中将一个可完成的未来划分为多个可完成的未来?

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档