1.rxandroid è½åç¬ä½¿ç¨å
2.Android 面试知识点记录——Rxjava与协程
3.rxandroidårxjavaçåºå«
4.rxa是码解什么意思
rxandroid è½åç¬ä½¿ç¨å
ããReactiveXçæ¯ç§ç¼ç¨è¯è¨çå®ç°é½å®ç°äºä¸ç»æä½ç¬¦çéåãä¸åçå®ç°ä¹é´æå¾å¤éå çé¨åï¼ä¹æä¸äºæä½ç¬¦åªåå¨ç¹å®çå®ç°ä¸ãæ¯ç§å®ç°é½å¾åäºç¨é£ç§ç¼ç¨è¯è¨ä¸ä»ä»¬çæçä¸ä¸æä¸ç¸ä¼¼çæ¹æ³ç»è¿äºæä½ç¬¦å½åãæ¬æé¦å ä¼ç»åºReactiveXçæ ¸å¿æä½ç¬¦å表å对åºçææ¡£é¾æ¥ï¼åé¢è¿æä¸ä¸ªå³çæ ç¨äºå¸®å©ä½ æ ¹æ®å ·ä½çåºæ¯éæ©åéçæä½ç¬¦ãæåæä¸ä¸ªè¯è¨ç¹å®å®ç°çæåæ¯æåºçæä½ç¬¦å表ãå¦æä½ æ³å®ç°ä½ èªå·±çæä½ç¬¦ï¼å¯ä»¥åèè¿éï¼å®ç°èªå®ä¹æä½ç¬¦å建æä½ç¨äºå建Observableçæä½ç¬¦Create â éè¿è°ç¨è§å¯è çæ¹æ³ä»å¤´å建ä¸ä¸ªObservableDefer â å¨è§å¯è 订é ä¹åä¸å建è¿ä¸ªObservableï¼ä¸ºæ¯ä¸ä¸ªè§å¯è å建ä¸ä¸ªæ°çObservableEmpty/Never/Throw â å建è¡ä¸ºåéçç¹æ®ObservableFrom â å°å ¶å®ç对象ææ°æ®ç»æ转æ¢ä¸ºObservableInterval â å建ä¸ä¸ªå®æ¶åå°æ´æ°åºåçObservableJust â å°å¯¹è±¡æè 对象éå转æ¢ä¸ºä¸ä¸ªä¼åå°è¿äºå¯¹è±¡çObservableRange â å建åå°æå®èå´çæ´æ°åºåçObservableRepeat â å建éå¤åå°ç¹å®çæ°æ®ææ°æ®åºåçObservableStart â å建åå°ä¸ä¸ªå½æ°çè¿åå¼çObservableTimer â å建å¨ä¸ä¸ªæå®ç延è¿ä¹ååå°å个æ°æ®çObservableåæ¢æä½è¿äºæä½ç¬¦å¯ç¨äºå¯¹Observableåå°çæ°æ®è¿è¡åæ¢ï¼è¯¦ç»è§£éå¯ä»¥çæ¯ä¸ªæä½ç¬¦çææ¡£Buffer â ç¼åï¼å¯ä»¥ç®åçç解为ç¼åï¼å®å®æä»Observableæ¶éæ°æ®å°ä¸ä¸ªéåï¼ç¶åæè¿äºæ°æ®éåæå åå°ï¼èä¸æ¯ä¸æ¬¡åå°ä¸ä¸ªFlatMap â æå¹³æ å°ï¼å°Observableåå°çæ°æ®åæ¢ä¸ºObservableséåï¼ç¶åå°è¿äºObservableåå°çæ°æ®å¹³å¦åçæ¾è¿ä¸ä¸ªåç¬çObservableï¼å¯ä»¥è®¤ä¸ºæ¯ä¸ä¸ªå°åµå¥çæ°æ®ç»æçè¿ç¨ãGroupBy â åç»ï¼å°åæ¥çObservableåæ为Observableéåï¼å°åå§Observableåå°çæ°æ®æKeyåç»ï¼æ¯ä¸ä¸ªObservableåå°ä¸ç»ä¸åçæ°æ®Map â æ å°ï¼éè¿å¯¹åºåçæ¯ä¸é¡¹é½åºç¨ä¸ä¸ªå½æ°åæ¢Observableåå°çæ°æ®ï¼å®è´¨æ¯å¯¹åºåä¸çæ¯ä¸é¡¹æ§è¡ä¸ä¸ªå½æ°ï¼å½æ°çåæ°å°±æ¯è¿ä¸ªæ°æ®é¡¹Scan â æ«æï¼å¯¹Observableåå°çæ¯ä¸é¡¹æ°æ®åºç¨ä¸ä¸ªå½æ°ï¼ç¶åæ顺åºä¾æ¬¡åå°è¿äºå¼Window â çªå£ï¼å®æå°æ¥èªObservableçæ°æ®åææä¸äºObservableçªå£ï¼ç¶ååå°è¿äºçªå£ï¼èä¸æ¯æ¯æ¬¡åå°ä¸é¡¹ã类似äºBufferï¼ä½Bufferåå°çæ¯æ°æ®ï¼Windowåå°çæ¯Observableï¼æ¯ä¸ä¸ªObservableåå°åå§Observableçæ°æ®çä¸ä¸ªåéè¿æ»¤æä½è¿äºæä½ç¬¦ç¨äºä»Observableåå°çæ°æ®ä¸è¿è¡éæ©Debounce â åªæå¨ç©ºé²äºä¸æ®µæ¶é´åæåå°æ°æ®ï¼éä¿ç说ï¼å°±æ¯å¦æä¸æ®µæ¶é´æ²¡ææä½ï¼å°±æ§è¡ä¸æ¬¡æä½Distinct â å»éï¼è¿æ»¤æéå¤æ°æ®é¡¹ElementAt â åå¼ï¼åç¹å®ä½ç½®çæ°æ®é¡¹Filter â è¿æ»¤ï¼è¿æ»¤æ没æéè¿è°è¯æµè¯çæ°æ®é¡¹ï¼åªåå°éè¿æµè¯çFirst â é¦é¡¹ï¼åªåå°æ»¡è¶³æ¡ä»¶ç第ä¸æ¡æ°æ®IgnoreElements â 忽ç¥ææçæ°æ®ï¼åªä¿çç»æ¢éç¥(onErroræonCompleted)Last â æ«é¡¹ï¼åªåå°æåä¸æ¡æ°æ®Sample â åæ ·ï¼å®æåå°ææ°çæ°æ®ï¼çäºæ¯æ°æ®æ½æ ·ï¼æçå®ç°éå«ThrottleFirstSkip â è·³è¿åé¢çè¥å¹²é¡¹æ°æ®SkipLast â è·³è¿åé¢çè¥å¹²é¡¹æ°æ®Take â åªä¿çåé¢çè¥å¹²é¡¹æ°æ®TakeLast â åªä¿çåé¢çè¥å¹²é¡¹æ°æ®ç»åæä½ç»åæä½ç¬¦ç¨äºå°å¤ä¸ªObservableç»åæä¸ä¸ªåä¸çObservableAnd/Then/When â éè¿æ¨¡å¼(Andæ¡ä»¶)å计å(Then次åº)ç»å两个æå¤ä¸ªObservableåå°çæ°æ®éCombineLatest â å½ä¸¤ä¸ªObservablesä¸çä»»ä½ä¸ä¸ªåå°äºä¸ä¸ªæ°æ®æ¶ï¼éè¿ä¸ä¸ªæå®çå½æ°ç»åæ¯ä¸ªObservableåå°çææ°æ°æ®ï¼ä¸å ±ä¸¤ä¸ªæ°æ®ï¼ï¼ç¶ååå°è¿ä¸ªå½æ°çç»æJoin â æ 论ä½æ¶ï¼å¦æä¸ä¸ªObservableåå°äºä¸ä¸ªæ°æ®é¡¹ï¼åªè¦å¨å¦ä¸ä¸ªObservableåå°çæ°æ®é¡¹å®ä¹çæ¶é´çªå£å ï¼å°±å°ä¸¤ä¸ªObservableåå°çæ°æ®å并åå°Merge â å°ä¸¤ä¸ªObservableåå°çæ°æ®ç»å并æä¸ä¸ªStartWith â å¨åå°åæ¥çObservableçæ°æ®åºåä¹åï¼å åå°ä¸ä¸ªæå®çæ°æ®åºåææ°æ®é¡¹Switch â å°ä¸ä¸ªåå°ObservableåºåçObservable转æ¢ä¸ºè¿æ ·ä¸ä¸ªObservableï¼å®é个åå°é£äºObservableæè¿åå°çæ°æ®Zip â æå ï¼ä½¿ç¨ä¸ä¸ªæå®çå½æ°å°å¤ä¸ªObservableåå°çæ°æ®ç»åå¨ä¸èµ·ï¼ç¶åå°è¿ä¸ªå½æ°çç»æä½ä¸ºå项æ°æ®åå°é误å¤çè¿äºæä½ç¬¦ç¨äºä»é误éç¥ä¸æ¢å¤Catch â æè·ï¼ç»§ç»åºåæä½ï¼å°é误æ¿æ¢ä¸ºæ£å¸¸çæ°æ®ï¼ä»onErroréç¥ä¸æ¢å¤Retry â éè¯ï¼å¦æObservableåå°äºä¸ä¸ªé误éç¥ï¼éæ°è®¢é å®ï¼æå¾ å®æ£å¸¸ç»æ¢è¾ å©æä½ä¸ç»ç¨äºå¤çObservableçæä½ç¬¦Delay â 延è¿ä¸æ®µæ¶é´åå°ç»ææ°æ®Do â 注åä¸ä¸ªå¨ä½å ç¨ä¸äºObservableççå½å¨æäºä»¶ï¼ç¸å½äºMockæ个æä½Materialize/Dematerialize â å°åå°çæ°æ®åéç¥é½å½åæ°æ®åå°ï¼æè åè¿æ¥ObserveOn â æå®è§å¯è è§å¯Observableçè°åº¦ç¨åºï¼å·¥ä½çº¿ç¨ï¼Serialize â 强å¶Observableæ次åºåå°æ°æ®å¹¶ä¸åè½æ¯ææçSubscribe â æ¶å°Observableåå°çæ°æ®åéç¥åæ§è¡çæä½SubscribeOn â æå®Observableåºè¯¥å¨åªä¸ªè°åº¦ç¨åºä¸æ§è¡TimeInterval â å°ä¸ä¸ªObservable转æ¢ä¸ºåå°ä¸¤ä¸ªæ°æ®ä¹é´æèè´¹æ¶é´çObservableTimeout â æ·»å è¶ æ¶æºå¶ï¼å¦æè¿äºæå®çä¸æ®µæ¶é´æ²¡æåå°æ°æ®ï¼å°±åå°ä¸ä¸ªé误éç¥Timestamp â ç»Observableåå°çæ¯ä¸ªæ°æ®é¡¹æ·»å ä¸ä¸ªæ¶é´æ³Using â å建ä¸ä¸ªåªå¨Observableççå½å¨æå åå¨çä¸æ¬¡æ§èµæºæ¡ä»¶åå¸å°æä½è¿äºæä½ç¬¦å¯ç¨äºå个æå¤ä¸ªæ°æ®é¡¹ï¼ä¹å¯ç¨äºObservableAll â å¤æObservableåå°çææçæ°æ®é¡¹æ¯å¦é½æ»¡è¶³æ个æ¡ä»¶Amb â ç»å®å¤ä¸ªObservableï¼åªè®©ç¬¬ä¸ä¸ªåå°æ°æ®çObservableåå°å ¨é¨æ°æ®Contains â å¤æObservableæ¯å¦ä¼åå°ä¸ä¸ªæå®çæ°æ®é¡¹DefaultIfEmpty â åå°æ¥èªåå§Observableçæ°æ®ï¼å¦æåå§Observable没æåå°æ°æ®ï¼å°±åå°ä¸ä¸ªé»è®¤æ°æ®SequenceEqual â å¤æ两个Observableæ¯å¦æç¸åçæ°æ®åºåSkipUntil â 丢å¼åå§Observableåå°çæ°æ®ï¼ç´å°ç¬¬äºä¸ªObservableåå°äºä¸ä¸ªæ°æ®ï¼ç¶ååå°åå§Observableçå©ä½æ°æ®SkipWhile â 丢å¼åå§Observableåå°çæ°æ®ï¼ç´å°ä¸ä¸ªç¹å®çæ¡ä»¶ä¸ºåï¼ç¶ååå°åå§Observableå©ä½çæ°æ®TakeUntil â åå°æ¥èªåå§Observableçæ°æ®ï¼ç´å°ç¬¬äºä¸ªObservableåå°äºä¸ä¸ªæ°æ®æä¸ä¸ªéç¥TakeWhile â åå°åå§Observableçæ°æ®ï¼ç´å°ä¸ä¸ªç¹å®çæ¡ä»¶ä¸ºçï¼ç¶åè·³è¿å©ä½çæ°æ®ç®æ¯åèåæä½è¿äºæä½ç¬¦å¯ç¨äºæ´ä¸ªæ°æ®åºåAverage â 计ç®Observableåå°çæ°æ®åºåçå¹³åå¼ï¼ç¶ååå°è¿ä¸ªç»æConcat â ä¸äº¤éçè¿æ¥å¤ä¸ªObservableçæ°æ®Count â 计ç®Observableåå°çæ°æ®ä¸ªæ°ï¼ç¶ååå°è¿ä¸ªç»æMax â 计ç®å¹¶åå°æ°æ®åºåçæ大å¼Min â 计ç®å¹¶åå°æ°æ®åºåçæå°å¼Reduce â æ顺åºå¯¹æ°æ®åºåçæ¯ä¸ä¸ªåºç¨æ个å½æ°ï¼ç¶åè¿åè¿ä¸ªå¼Sum â 计ç®å¹¶åå°æ°æ®åºåçåè¿æ¥æä½ä¸äºæ精确å¯æ§ç订é è¡ä¸ºçç¹æ®ObservableConnect â æ示ä¸ä¸ªå¯è¿æ¥çObservableå¼å§åå°æ°æ®ç»è®¢é è Publish â å°ä¸ä¸ªæ®éçObservable转æ¢ä¸ºå¯è¿æ¥çRefCount â 使ä¸ä¸ªå¯è¿æ¥çObservable表ç°å¾åä¸ä¸ªæ®éçObservableReplay â ç¡®ä¿ææçè§å¯è æ¶å°åæ ·çæ°æ®åºåï¼å³ä½¿ä»ä»¬å¨Observableå¼å§åå°æ°æ®ä¹åæ订é 转æ¢æä½To â å°Observable转æ¢ä¸ºå ¶å®ç对象ææ°æ®ç»æBlocking é»å¡Observableçæä½ç¬¦æä½ç¬¦å³çæ å ç§ä¸»è¦çéæ±ç´æ¥å建ä¸ä¸ªObservableï¼å建æä½ï¼ç»åå¤ä¸ªObservableï¼ç»åæä½ï¼å¯¹Observableåå°çæ°æ®æ§è¡åæ¢æä½ï¼åæ¢æä½ï¼ä»Observableåå°çæ°æ®ä¸åç¹å®çå¼ï¼è¿æ»¤æä½ï¼è½¬åObservableçé¨åå¼ï¼æ¡ä»¶/å¸å°/è¿æ»¤æä½ï¼å¯¹Observableåå°çæ°æ®åºåæ±å¼ï¼ç®æ¯/èåæä½ï¼
Android 面试知识点记录——Rxjava与协程
作者:浪人笔记
RxJava协程与操作符
在RxJava中,map操作符实现简单,码解它在原有Observable的码解基础上添加MapObservable观察者,将变换函数作为参数传递。码解MapObservable的码解onNext方法接收元素,传递给变换函数进行变换,码解iapp关机源码结果作为新元素发射。码解
而flatMap操作符实现相对复杂。码解它在原有Observable上添加FlatMapObservable观察者,码解并将变换函数作为参数传递。码解FlatMapObservable的码解onNext方法接收元素,传递给变换函数得到新Observable,码解blender源码开发语言注册到FlatMapSubscriber中等待下一次数据。码解数据处理完成后,码解调用FlatMapSubscriber的码解onComplete方法,合并所有得到的Observable成新Observable发射。
RxJava1.0与2.0区别
RxJava2.0在异常处理、背压支持、线程调度和性能等方面改进和提升。
背压概念与解决方案
背压是指数据产生速度大于消费速度,导致内存溢出等问题。RxJava1.x没有背压支持,使用onBackpressureBuffer、asp家庭记账源码onBackpressureDrop缓解,而RxJava2.0引入Flowable支持背压,提供更多背压控制策略。
Flowable类型支持背压,通过onBackpressureBuffer、onBackpressureDrop、onBackpressureLatest等方法处理背压问题。Flowable方式类似Observable,使用时需指定背压策略。
subscribeOn与observeOn
subscribeOn只影响第一次指定的线程,后续操作不影响。仿转转a源码subscribeOn理解为管道入口,observeOn理解为出口,数据处理后出口策略可变。
RxJava数据流回主线程
使用observeOn(AndroidSchedulers.mainThread()),内部实现为Handler(Looper.getMainLooper())。
协程、进程、线程、协程区别
Kotlin协程基于挂起函数实现,不依赖操作系统和编译器,实现协程效果。京东溯源码意义
处理回调地狱与协程
协程通过挂起函数减少回调嵌套,提高代码可读性。使用withContext指定协程执行上下文,避免主线程阻塞。
开发中选择调度器
通常选择主线程、IO密集型和CPU密集型调度器,对应Kotlin协程中的上下文。
Android核心知识点记录
包含性能优化、车载技术、Framework底层原理、音视频开发、Jetpack全家桶、Kotlin、Gradle、OkHttp源码解析、Flutter等主题,涵盖Android开发者必备知识。
Android面试题集锦
整理多年面试题集,包括Android基础知识、性能优化、音视频、Jetpack全家桶、Kotlin、Gradle、OkHttp源码解析等内容,为开发者提供面试准备。
Android音视频面试题集
聚焦于Android音视频开发的关键问题,帮助开发者深入理解音视频技术。
rxandroidårxjavaçåºå«
RxJavaè¦æ¯EventBusçåºç¨æ´å¹¿æ³ï¼EventBusä» ä» æ¯ä½ä¸ºä¸ç§æ¶æ¯çä¼ éå·¥å ·ï¼ä½æ¯RxJavaéé¢å ä¹å¯ä»¥åä»»ä½äºæ ã
å¦ææ¯Androidå¼åçè¯ï¼å¯ä»¥ä½¿ç¨RxAndroidï¼è¿æ¯å¯¹RxJavaçä¸ä¸ªæ©å±ï¼ç»åsqareå ¬å¸çretrofitå¯ä»¥å¾è½»æ¾çå®æç½ç»ç访é®ã
æ们ç¥éï¼å¨Androidä¸å¼æ¥æä½ä¸è¬ä½¿ç¨AsycTaskæ¥å®æï¼ä½æ¯AsycTaskæå¾å¤ç¼ºç¹ï¼å¦ä¸è½æ¹ä¾¿çç»æ¢ä»»å¡çæ§è¡çã
RxAndroidå®å ¨å¯ä»¥æ¿ä»£AsycTaskæ¥å®æåç§å¼æ¥æä½ï¼èä¸è¿æBindActivityåBindFragmentæ¹æ³ï¼ä½ æ ¹æ¬ä¸éè¦èèå¼æ¥æä½æ¶çActivityåFragmentççå½å¨æé®é¢ï¼è¿ææ´å 强大ççé¾å¼è°ç¨ï¼å¯ä»¥ä½¿ç¨åºå¾ç®æ´ã
EventBusæ个缺ç¹å°±æ¯å¡æ¯ä½¿ç¨äºEventBusçç±»é½ä¸è½è¿è¡æ··æ·äºï¼å¦åEvnetbuså°±æ¾ä¸å°OnEventæ¹æ³äºã
以ä¸ï¼æ¨è使ç¨RxAndroidã
rxa是什么意思
rxa是RxAndroid的缩写。
RxAndroid是在Android平台上对RxJava的封装,它让开发者能够在Android应用中更方便地使用响应式编程。响应式编程是一种异步编程模式,它允许开发者以声明式的方式处理异步数据流,从而使代码更加简洁、易读和可维护。
RxAndroid提供了许多常用的操作符,这些操作符可以对异步数据流进行各种转换和操作,如过滤、映射、合并、延迟等。这些操作符使得开发者能够灵活地处理异步数据,实现更加复杂的业务逻辑。
例如,在一个Android应用中,开发者可能需要从网络请求中获取数据,并在获取到数据后更新UI。使用RxAndroid,开发者可以将网络请求封装成一个Observable对象,然后使用操作符对数据进行处理,最后订阅这个Observable对象并在数据更新时更新UI。这种方式不仅简化了代码结构,还提高了代码的可读性和可维护性。
总之,rxa(RxAndroid)是一种在Android平台上实现响应式编程的工具,它提供了丰富的操作符和灵活的数据处理方式,帮助开发者更加高效地处理异步数据和更新UI。