首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理并发网络调用(http客户端)以便在单个活动中加载多个片段(松散耦合)数据的最佳方法是什么?

管理并发网络调用(http客户端)以便在单个活动中加载多个片段(松散耦合)数据的最佳方法是什么?
EN

Stack Overflow用户
提问于 2016-09-27 17:27:28
回答 1查看 860关注 0票数 0

我在基于会话的应用程序使用卡尔图拉resftful APis工作。

设计是这样的,我在每个页面中都有一个视图pager+tablayout,我有一个片段,所有片段都绑定到单个活动。

在splash中,我连接到Api并创建了一个会话,现在我有多个网络调用(所有这些都必须在异步任务中完成)。

问题陈述:

假设我有C1、C2、C3、C4、C5、C6片段和

每个C都有它自己的数据集(通过n/w调用,异步任务)加载数据会阻塞主线程,如果用户滑动到另一个页面,一个新的异步任务将被执行,而前一个后台线程仍在加载,这会导致延迟和ANR。

建议:

管理每个片段的网络调用的最佳方法是什么:我是否应该在8-10左右为这些异步任务创建线程池,并在splash中启动线程池。

我非常热衷于活动的内存泄漏,并希望实现快速加载viewpager(片段的视图),我读了很多问题和@commonsWare Blog,也

this discussion on thread pooler,但想知道做上述问题的更好的方法/架构。

EN

回答 1

Stack Overflow用户

发布于 2016-10-18 15:43:25

试试RxJava。这是比异步任务更好的方法,因为异步任务不会同时进行多个网络调用。RxJava是一个很好的(但很难学的)库,它可以用来进行更简单的多线程。

你可以对它使用Retrofit,所以这不是问题。

有了kaltura API,你就得玩转了。

为了一次调用多个函数,你可以在几个调用中使用merge函数,这样所有的调用都会被一次调用。

您还可以在创建新片段时调用每个Observable,如果操作正确,RxJava将负责线程处理,因此“旧的”Observable不会停止,新的将继续加载新数据。

此外,zip函数可以很方便,因为它可以加载几个源到“一个”对象。

还有我的github项目的链接(很抱歉没有可读性):

https://github.com/JanuszHain/SocialMediaWatcher

您可能感兴趣的文件(使用不直接支持RxJava的API使用RxJava加载数据):

使用API库(Twitter)通过回调获取数据,然后从中创建观察值(例如,函数private Observable<ArrayList<Tweet>> createObservableReadTweets(final String screen_name, final int count)):https://github.com/JanuszHain/SocialMediaWatcher/blob/master/app/src/main/java/pl/janusz/hain/socialmediawatcher/TwitterTimelineGetter.java

订阅创建的函数( Observable observableGetNewTweets())。注意,我在这个函数中的Observable之外创建了新的Observable,所以它可能有点复杂:https://github.com/JanuszHain/SocialMediaWatcher/blob/master/app/src/main/java/pl/janusz/hain/socialmediawatcher/TwitterTimeline.java

创建ObservablesArrayList,然后合并(一次创建多个调用):https://github.com/JanuszHain/SocialMediaWatcher/blob/master/app/src/main/java/pl/janusz/hain/socialmediawatcher/TwitterWall.java

这是我的日程安排。它用于可观察的配置,限制线程数量以优化大量的新线程请求:https://github.com/JanuszHain/SocialMediaWatcher/blob/master/app/src/main/java/pl/janusz/hain/socialmediawatcher/util/MyScheduler.java

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

https://stackoverflow.com/questions/39720993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档