⑴ rxjava2 多长时间响应一次
才学RxJava的时候还是挺困惑的,感觉有特别多的对『时间』的操作符,比如timer()、interval()、delay()、defer()等等……总之功能太强大,直接吓跑了一群初学者。身边有朋友这样跟我说:RxJava为了省点代码,把逻辑弄这么复杂,看着都晕了,我宁愿多写点if-else我只能回复:用RxJava逻辑肯定是变简单了,一旦用上手了,再也离不开了。现在让我写个Thread+Handler我都觉得麻烦。timer()这里说的是新版本的timer(),而老版本的timer()已经跟interval()合并了。timer():创建一个Observable,它在一个给定的延迟后发射一个特殊的值这里需要注意,定义里面说的是『一个』,所以有别于之前用的TimerTask。timer()只是用来创建一个Observable,并延迟发送一次的操作符,timer()并不会按周期执行。interval()interval():创建一个按固定时间间隔发射整数序列的Observable这个比较好理解,interval()也是用来创建Observable的,并且也可以延迟发送。但interval()是按周期执行的,所以可以这么认为:interval()是一个可以指定线程的TimerTask(威力加强版……)delay()delay():延迟一段指定的时间再发送来自Observable的发送结果语文没学好肯定读不懂这一段,我才看到这句话的时候也懵了……其实delay()的常规使用跟timer()一致,那区别在哪呢?delay()是用于流中的操作,跟map()、flatMap()的级别是一样的。而timer()是用于创建Observable,跟just()、from()的级别是一样的。总结timer():用于创建Observable,延迟发送一次。interval():用于创建Observable,跟TimerTask类似,用于周期性发送。delay():用于事件流中,可以延迟发送事件流中的某一次发送。网络连接失败的处理看过最前面那篇文章的应该很清楚retryWhen()是什么了。我再来总结一下,retryWhen()的直面意思就是:发生错误了,接下来该做什么。retryWhen()是RxJava的一种错误处理机制,当遇到错误时,将错误传递给另一个Observable来决定是否要重新给订阅这个Observable
⑵ retrofit 2 支持rxjava2了吗
貌似还没有支持
⑶ Android 开发有哪些新技术出现
1、开发工具
Android Studio: Google 官方放弃 Eclipse 和 Android Studio 普及。AS 虽然不算新,但是对 Android Studio 这个软件的更新速度快的惊人,有大量的新功能发布。例如支持很多注解代码提示注解、Live code template、支持自动生成 Parcelable 实现等等,作为开发者,持续关注这个更新列表 Recent Changes,一定会让写代码的生活更加美好。
2、编程“语言”
Kotlin:作为 Android 领域的 Swift,绝对如沐新风。抛弃沉重的 Java 语法,Kotlin 融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。在 Android 开发上,使用 Kotlin 并不会付出什么代价,为什么不来试试使用Kotlin进行Android开发。
React Nativ: 跨平台一直是程序员的梦想,而且移动应用的跨平台解决方案也很多,因为 Facebook 的参与和力推,让这个解决方案带上了光环。第一个用 React Native 开发的 App 已经在 Google Play 上架 Facebook 广告管理工具,听说 Android 的 SDK 也马上会到来,React Native。
Sky:与 React Native 类似,使用 Web 开发语言来做移动平台的开发,虽然这个只是一个尝试,但是这是 Google 自身推出的,特别是在 Java 语言的使用上败诉之后,这可能会有一些作为呢,domokit/sky_sdk。
3、开发模式
Dagger 2:依赖注入并不是什么新技术,但是使用在 Android 确实一个新的尝试。Android App 越来越被当成严肃的大型项目来构建,很多在以前大型服务器开发上使用的技术都被应用到了移动开发。Android 开发分模块开发,使用 Dagger 来松耦合模块。特别值得一体的是,Dagger 2 现在由 Google 亲自接管。 Dagger ‡ A fast dependency injector for Android and Java。
MVP:因为 Android 并没有严格的业务和界面区分,项目一复杂,就很容易使代码陷入混乱。现在 Android 开发社区对 MVP 模式讨论越来越热,觉得 MVP 是非常适合 Android APP 开发。MVP for Android: how to organize the presentation layer。
RxAndroid:函数响应式编程(Functional Reactive Programming)也不是新内容,RxAndroid 把 RxJava 带到 Android 环境中。很多时候,编写 Android 程序,也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了:ReactiveX/RxAndroid。
MVVM:这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web 已经非常常见,它非常高效的开发效率,只关心数据和业务。这也对 Android 开发来说,无疑是一个非常重大的影响:android UI设计MVVM设计模式讨论?。
插件化:针对大型 Android 项目,很多 App 开始使用插件来分模块构建相对独立的功能。
Hybrid:完全使用 HTML 5 开发 App,目前还不成熟。但是折中方案在很多情况下是非常适合的,典型的就是微信,大部分信息展示都是通过 H5 来完成,同时通过 Hybird 方式,把 Web 和 Native 打通,提供给网页访问本地资源的能力。
4、UI设计
Material Design:已经红遍了大江南北,这方面的讨论实在太多了,而且各种支持库都有了,特别是 Google 官方出了一个支持库 Android Design Support Library。
Sketch 3:这是一个专为设计移动端 UI 的设计工具,作为开发者,不用懂那么复杂的 PS 使用,也可以做非常专业设计。
⑷ 真的有必要用rxjava吗
RxJava目前项目在用还是很稳定的 目前网络用的是Rxjava+ReTrofit+okHttp这些框架已经很成熟了完全可以引入项目
⑸ io.reactivex.rxjava2是android下哪个包引用的
你下载的文件比较奇怪,也许是下载软件重命名错误,下载下来的文件应该是一版个zip压缩包,权解压出来放到手机卡上就行了。试试.bmap扩展名改成.zip能不能解压。 到78App网站查看回答详情>>
⑹ retrofit2+MVP+rxjava2+rxlifecycle2 为什么无法解决内存泄露
随着Android第三库的普及, RxJava 和 RxAndroid ( tiveX/RxAndroid )越来越被人熟知,简洁的语法,配合Java8 Lambda表达式,使代码的结构更加清晰,通过线程调度器更容易控制和切换线程,种种优点,使用它的人也越来越多。但是使用不好,很容易导致内存泄露。 Rxlifecycle (b.com/trello/RxLifecycle )就使被用来严格控制由于发布了一个订阅后,由于没有及时取消,导致Activity/Fragment无法销毁导致的内存泄露 。
RxJava和RxAndroid
compile 'io.reactivex:rxandroid:1.0.1'compile 'io.reactivex:rxjava:1.0.16'12
Rxlifecycle
compile 'com.trello:rxlifecycle:0.3.0'
compile 'com.trello:rxlifecycle-components:0.3.0'12
Rxlifecycle 使用
Activity/Fragment需继承RxAppCompatActivity/RxFragment,目前支持的有RxAppCompatActivity、RxFragment、RxDialogFragment、RxFragmentActivity。
一、bindToLifecycle()方法
在子类使用Observable中的compose操作符,调用,完成Observable发布的事件和当前的组件绑定,实现生命周期同步。从而实现当前组件生命周期结束时,自动取消对Observable订阅。
Observable.interval(1, TimeUnit.SECONDS)
.compose(this.bindToLifecycle())
.subscribe(new Action1<Long>() {
@Override
public void call(Long num) {
Log.i(TAG, " " +num);
}
});12345678
二、bindUntilEvent() 方法
使用ActivityEvent类,其中的CREATE、START、 RESUME、PAUSE、STOP、 DESTROY分别对应生命周期内的方法。使用bindUntilEvent指定在哪个生命周期方法调用时取消订阅。
Observable.interval(1, TimeUnit.SECONDS) .compose(this.bindUntilEvent(ActivityEvent.PAUSE))
.subscribe(mSub);