1.ITå¹è®å享mapåflatmapçå
±åç¹ååºå«
2.rxjava zipåmergeçåºå«
3.Android 面试知识点记录——Rxjava与协程
ITå¹è®å享mapåflatmapçå ±åç¹ååºå«
å¨å½æ°å¼è¯è¨ä¸ï¼å½æ°ä½ä¸ºä¸çå ¬æ°ï¼å¯ä»¥å¨ä»»ä½å°æ¹å®ä¹ï¼å¨å½æ°å æå½æ°å¤ï¼å¯ä»¥ä½ä¸ºå½æ°çåæ°åè¿åå¼ï¼å¯ä»¥å¯¹å½æ°è¿è¡ç»åãç±äºå½ä»¤å¼ç¼ç¨è¯è¨ä¹å¯ä»¥éè¿ç±»ä¼¼å½æ°æéçæ¹å¼æ¥å®ç°é«é¶å½æ°ï¼å½æ°å¼çæ主è¦ç好å¤ä¸»è¦æ¯ä¸å¯åæ§å¸¦æ¥çã没æå¯åçç¶æï¼å½æ°å°±æ¯å¼ç¨éæï¼Referentialtransparencyï¼çå没æå¯ä½ç¨ï¼NoSideEffectï¼ãITå¹è®/å°±æ¥ä¸ºå¤§å®¶ä»ç»ä»ç»ãä»»ä½ä¸ç§å½æ°å¼è¯è¨ä¸ï¼é½æmapå½æ°ä¸faltMapè¿ä¸¤ä¸ªå½æ°ï¼æ¯å¦pythonè½ç¶ä¸æ¯çº¯å½æ°å¼è¯è¨ï¼ä¹æè¿ä¸¤ä¸ªå½æ°ãåæ¯å¦å¨jdk1.8ä¹åï¼ä¹å å ¥äºLambda表达å¼ï¼èªç¶ä¹æ¯æmapå½æ°ã
mapåfaltMapçå ±åç¹ååºå«
1ãå ±åç¹
é½æ¯ä¾èµFuncX(å ¥åï¼è¿åå¼)è¿è¡è½¬æ¢ï¼å°ä¸ä¸ªç±»åä¾æ®ç¨åºé»è¾è½¬æ¢æå¦ä¸ç§ç±»åï¼æ ¹æ®å ¥ååè¿åå¼ï¼
é½è½å¨è½¬æ¢åç´æ¥è¢«subscribe
2ãåºå«
mapè¿åçæ¯ç»æéï¼flatmapè¿åçæ¯å å«ç»æéçObservableï¼è¿åç»æä¸åï¼
map被订é æ¶æ¯ä¼ éä¸ä¸ªäºä»¶æ§è¡ä¸æ¬¡onNextæ¹æ³ï¼flatmapå¤ç¨äºå¤å¯¹å¤ï¼ä¸å¯¹å¤ï¼å被转å为å¤ä¸ªæ¶ï¼ä¸è¬å©ç¨from/justè¿è¡ä¸ä¸ååï¼è¢«è®¢é æ¶å°æææ°æ®ä¼ éå®æ¯æ±æ»å°ä¸ä¸ªObservableç¶åä¸ä¸æ§è¡onNextæ¹æ³ï¼æ§è¡é¡ºåºä¸åï¼>>>>(å¦å纯ç¨äºä¸å¯¹ä¸è½¬æ¢ååmapç¸å)
mapåªè½åä¸è½¬æ¢ï¼åä¸åªçæ¯åªè½ä¸å¯¹ä¸è¿è¡è½¬æ¢ï¼æä¸ä¸ªå¯¹è±¡å¯ä»¥è½¬å为å¦ä¸ä¸ªå¯¹è±¡ä½æ¯ä¸è½è½¬æ¢æ对象æ°ç»ï¼mapè¿åç»æéä¸è½ç´æ¥ä½¿ç¨from/justå次è¿è¡äºä»¶ååï¼ä¸æ¦è½¬æ¢æ对象æ°ç»çè¯ï¼åå¤çéå/æ°ç»çç»ææ¶éè¦å©ç¨forä¸ä¸éåååºï¼è使ç¨RxJavaå°±æ¯ä¸ºäºåé¤è¿æ ·çåµå¥ç»æï¼ä½¿å¾æ´ä½çé»è¾æ§æ´å¼ºãï¼
flatmapæ¢å¯ä»¥åä¸è½¬æ¢ä¹å¯ä»¥ä¸å¯¹å¤/å¤å¯¹å¤è½¬æ¢ï¼flatmapè¦æ±è¿åObservableï¼å æ¤å¯ä»¥åå é¨è¿è¡from/justçå次äºä»¶ååï¼ä¸ä¸ååºåä¸å¯¹è±¡ï¼è½¬æ¢å¯¹è±¡çè½åä¸åï¼
mapå½æ°çç¨æ³ï¼é¡¾åæä¹ï¼å°ä¸ä¸ªå½æ°ä¼ å ¥mapä¸ï¼ç¶åå©ç¨ä¼ å ¥çè¿ä¸ªå½æ°ï¼å°éåä¸çæ¯ä¸ªå ç´ å¤çï¼å¹¶å°å¤çåçç»æè¿åãèflatMapä¸mapå¯ä¸ä¸ä¸æ ·çå°æ¹å°±æ¯ä¼ å ¥çå½æ°å¨å¤çå®åè¿åå¼å¿ é¡»æ¯Listï¼å ¶å®è¿ä¹ä¸é¾ç解ï¼æ¢ç¶æ¯flatMapï¼é£é¤äºmap以å¤å¿ ç¶è¿æflatçæä½ï¼æ以éè¦è¿åå¼æ¯Listæè½æ§è¡flatè¿ä¸æ¥ã
rxjava zipåmergeçåºå«
è·mergeçåºå«æ¯ï¼
1.æ¹æ³çåæ°ä¸ä¸æ ·ï¼zipæä¸ä¸ªå并å½æ°ï¼merge没æï¼æ以zipåå°æ°æ®æ¯å并å½æ°çè¿åå¼ï¼mergeåæ¯äº¤éæåå¤ä¸ªæºObservableåå°çæ°æ®ã
2.mergeçç»æ¢ä¸ä¼åä»»ä½ä¸ä¸ªObservableçåå°å®æèç»æ¢ï¼zipååªè¦æä¸ä¸ªObservableçåå°å®æèç»æ¢åå°
ï¼mergeåzipä¸åªè¦æä¸ä¸ªé误éç¥ç»æ¢ï¼å°±é½ç»æ¢ï¼
Android 面试知识点记录——Rxjava与协程
作者:浪人笔记
RxJava协程与操作符
在RxJava中,map操作符实现简单,它在原有Observable的基础上添加MapObservable观察者,将变换函数作为参数传递。MapObservable的onNext方法接收元素,传递给变换函数进行变换,交易 源码结果作为新元素发射。
而flatMap操作符实现相对复杂。它在原有Observable上添加FlatMapObservable观察者,并将变换函数作为参数传递。FlatMapObservable的onNext方法接收元素,传递给变换函数得到新Observable,注册到FlatMapSubscriber中等待下一次数据。数据处理完成后,调用FlatMapSubscriber的onComplete方法,合并所有得到的Observable成新Observable发射。
RxJava1.0与2.0区别
RxJava2.0在异常处理、标题栏源码背压支持、线程调度和性能等方面改进和提升。
背压概念与解决方案
背压是指数据产生速度大于消费速度,导致内存溢出等问题。RxJava1.x没有背压支持,使用onBackpressureBuffer、onBackpressureDrop缓解,而RxJava2.0引入Flowable支持背压,手机挖矿源码提供更多背压控制策略。
Flowable类型支持背压,通过onBackpressureBuffer、onBackpressureDrop、onBackpressureLatest等方法处理背压问题。Flowable方式类似Observable,使用时需指定背压策略。
subscribeOn与observeOn
subscribeOn只影响第一次指定的网络商城源码线程,后续操作不影响。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音视频开发的关键问题,帮助开发者深入理解音视频技术。