当前位置: 首页 > news >正文

做网站插背景图片如何变大交互式网站定义

做网站插背景图片如何变大,交互式网站定义,idea15网站开发,wordpress google翻译插件现在很多Android App的开发开始使用Rxjava#xff0c;但是Rxjava以学习曲线陡峭著称#xff0c;入门有些困难。经过一段时间的学习和使用#xff0c;这里来介绍一下我对Rxjava的理解。 说到Rxjava首先需要了解的两个东西#xff0c;一个是Observable#xff08;被观察者但是Rxjava以学习曲线陡峭著称入门有些困难。经过一段时间的学习和使用这里来介绍一下我对Rxjava的理解。   说到Rxjava首先需要了解的两个东西一个是Observable被观察者事件源和 Subscriber观察者是 Observer的子类。Observable发出一系列事件Subscriber处理这些事件。首先来看一个基本的例子我们如何创建并使用Observable。 Observable.create(new Observable.OnSubscribeString() { Override public void call(Subscriber? super String subscriber) { subscriber.onNext(hello); } }).subscribe(new SubscriberString(){ Override public void onCompleted() {} Override public void onError(Throwable e) { } Override public void onNext(String s) { Log.d(rx-info, s); } });创建Observable的最基本的方法是通过Observable.create() 来进行当有Subscriber通过Observable.subscribe() 方法进行订阅之后Observable就会发射事件注意必须要有订阅者订阅才会发射事件。发射的方式是通过调用 Observable中的 OnSubsribe 类型的成员来实现每个Observable有一个final OnSubscribeT onSubscribe 成员该成员是一个接口后面详细说在 Onsubsribe类型成员中调用 call() 方法注意这个call方法的参数就是 Observable.subscribe() 方法传入的 Subsriber实例。总的一句话就是在Obsubscribe 的 call方法中执行订阅者Subscriber的三个方法 onNext(), onCompleted() 和 onError()。   一开始就是一堆 Observable , Subscribersubscribe() , OnSubscribe 估计看得头晕因此我们需要先来对这些东西有一个了解。这里只列出一个帮助理解的大概。 public class ObservableT {final OnSubscribeT onSubscribe;protected Observable(OnSubscribeT f) {this.onSubscribe f;}public final static T ObservableT create(OnSubscribeT f) {return new ObservableT(hook.onCreate(f));}public interface OnSubscribeT extends Action1Subscriber? super T {// cover for generics insanity}public final Subscription subscribe(Subscriber? super T subscriber) {return Observable.subscribe(subscriber, this);}public interface OperatorR, T extends Func1Subscriber? super R, Subscriber? super T {// cover for generics insanity} } public interface Action1T extends Action {void call(T t); } public interface Subscription {void unsubscribe();boolean isUnsubscribed(); } public interface ObserverT {void onCompleted();void onError(Throwable e);void onNext(T t); }public abstract class SubscriberT implements ObserverT, Subscription {//... }通过上面的代码帮助理清楚 Observable, Observer, Subscriber, OnSubsriber, subscribe() 之间的关系。这里额外提一下 Observable.subscribe() 方法有多个重载 Subscription subscribe() Subscription subscribe(Action1? super T onNext) Subscription subscribe(Action1? super T onNext, Action1 java.lang .Throwable onError) Subscription subscribe(Action1? super T onNext, Action1 java.lang .Throwable onError, Action0 onComplete) Subscription subscribe(Observer? super T observer) Subscription subscribe(Subscriber? super T subscriber)其它的ActionX 和 FuncX 请大家自行去查阅定义。   介绍了基本的创建Observable和 Observable是怎么发射事件的之后来介绍一下Rxjava的Operator和Operator的原理。   Rxjava的Operator常见的有map, flatMap, concat, merge之类的。这里就不介绍Operator的使用了介绍一下其原理。介绍原理还是来看源码以map为例。   首先看一下使用map的例子 Observable.create(new Observable.OnSubscribeString() {Overridepublic void call(Subscriber? super String subscriber) {subscriber.onNext(hello);} }) .map(new Func1String, String() {Overridepublic String call(String s) {return s word;} }) .subscribe(new SubscriberString() {Overridepublic void onCompleted() {}Overridepublic void onError(Throwable e) {}Overridepublic void onNext(String s) {Log.d(info-rx, s);} });继续来看 map的定义 public final R ObservableR map(Func1? super T, ? extends R func) {return lift(new OperatorMapT, R(func));}简单说一下Func1其中的T表示传入的参数类型R表示方法返回的参数类型。Operator的操作原理最核心的就是lift的实现。 public final R ObservableR lift(final Operator? extends R, ? super T operator) {return new ObservableR(new OnSubscribeR() {Overridepublic void call(Subscriber? super R o) {try {Subscriber? super T st hook.onLift(operator).call(o);try {// new Subscriber created and being subscribed with so onStart itst.onStart();onSubscribe.call(st);} catch (Throwable e) {// localized capture of errors rather than it skipping all operators // and ending up in the try/catch of the subscribe method which then// prevents onErrorResumeNext and other similar approaches to error handlingExceptions.throwIfFatal(e);st.onError(e);}} catch (Throwable e) {Exceptions.throwIfFatal(e);// if the lift function failed all we can do is pass the error to the final Subscriber// as we dont have the operator available to uso.onError(e);}}});}lift方法看起来太过复杂稍作简化 public final R ObservableR lift(final Operator? extends R, ? super T operator) {return new ObservableR(...); }lift方法实际是产生一个新的 Observable。在map()调用之后我们操作的就是新的Observable对象我们可以把它取名为Observable$2我们这里调用subscribe就是Observable$2.subscribe继续看到subscribe里重要的几个调用 hook.onSubscribeStart(observable, observable.onSubscribe).call(subscriber); return hook.onSubscribeReturn(subscriber);注意这里的observable是Observable$2也就是说这里的onSubscribe是lift中定义的   回过头来看lift方法中创建新Observable的过程 return new ObservableR(new OnSubscribeR() {Overridepublic void call(Subscriber? super R o) {try {Subscriber? super T st hook.onLift(operator).call(o);try {// new Subscriber created and being subscribed with so onStart itst.onStart();onSubscribe.call(st); //请注意我 这个onSubscribe是原始的OnSubScribe对象} catch (Throwable e) {// localized capture of errors rather than it skipping all operators // and ending up in the try/catch of the subscribe method which then// prevents onErrorResumeNext and other similar approaches to error handlingif (e instanceof OnErrorNotImplementedException) {throw (OnErrorNotImplementedException) e;}st.onError(e);}} catch (Throwable e) {if (e instanceof OnErrorNotImplementedException) {throw (OnErrorNotImplementedException) e;}// if the lift function failed all we can do is pass the error to the final Subscriber// as we dont have the operator available to uso.onError(e);}} });一定一定要注意这段函数执行的上下文这段函数中的onSubscribe对象指向的是外部类也就是第一个Observable的onSubScribe而不是Observable$2中的onSubscribe接下来看 Subscriber? super T st hook.onLift(operator).call(o);这行代码就是定义operator生成一个经过operator操作过的Subscriber看下OperatorMap这个类中的call方法  Override public Subscriber? super T call(final Subscriber? super R o) {return new SubscriberT(o) {Overridepublic void onCompleted() {o.onCompleted();}Overridepublic void onError(Throwable e) {o.onError(e);}Overridepublic void onNext(T t) {try {o.onNext(transformer.call(t));} catch (Throwable e) {Exceptions.throwIfFatal(e);onError(OnErrorThrowable.addValueAsLastCause(e, t));}}}; }没错对传入的Subscriber做了一个代理把转换后的值传入。这样就生成了一个代理的Subscriber最后我们最外层的OnSubscribe对象对我们代理的Subscriber进行了调用  Override public void call(Subscriber? super String subscriber) {//此处的subscriber就是被map包裹(wrapper)后的对象。subscriber.onNext(hello); }然后这个subscriber传入到内部链式的通知最后通知到我们在subscribe函数中定义的对象。   分析lift的原理其实还是回到了一开始介绍的Observable必须要有订阅者进行订阅才能发射事件。lift方法会产生一个新的Observable并且这个Observable位于原始Observable和后面的Subsriber之间因此lift方法也需要提供一个新的Subscriber来使得新产生的Observable发射事件这个新的Subsriber就是对事件链后方的Subscriber就行包装做一个代理。   详细使用Rxjava可参见   1. 给 Android 开发者的 RxJava 详解   2.Rxjava使用基础合集  转载于:https://www.cnblogs.com/zhuyp1015/p/5215381.html
http://www.yutouwan.com/news/483494/

相关文章:

  • 宁波网站建设方案报价字节跳动员工人数2021
  • 5118素材网站wordpress u-degin
  • 阿克苏网站开发怎样做信息收费网站
  • 服务一流的做网站佛山模板建站哪家好
  • 做英文行程的网站个人建设网站服务器怎么解决
  • 天津网站建设开发有哪些网站建设公司名片
  • 做网站容易还是做小程序容易装修合同范本最新版
  • 网络公司如何建网站如何为自己的店铺做网站
  • 一个网站怎么做聚合广州越秀区酒店
  • 咸宁网站建设价格开发一个资金盘app多少钱
  • 国外网站打不开怎么解决网站是用什么做的
  • 株洲网站制作公司在哪里app网站开发成功案例
  • 有空间与域名 怎么做网站郑州北环附近网站建设
  • 网站外包后呗百度降权汉中网站seo
  • 网站地址和网页地址区别二建报考条件
  • 盘锦网站制作wordpress双栏主题开源
  • 小企业建站系统网站设计有哪些
  • 浙江坤宇建设有限公司网站广州营销型网站建设公司哪家名气大
  • 报价网站制作wordpress 注册 用户名
  • 正则表达式匹配网站Zillah wordpress
  • 南宁公司网站模板建站网页设计找工作
  • 黄平网站制作WordPress搭建點播流媒體
  • 无忧建站深圳工程建设服务网
  • 企业网站免费建站seo软件简单易排名稳定
  • 联兴建设官方网站有什么网站可以免费建站免费建网站
  • 济南网站制作公司哪家技术好华夏名网网站建设
  • 网站开发公司开发过程江苏炒股配资网站开发
  • 西安网站建设那家强做网站导航用什么开元程序
  • 建设机械网站策划郑州手机网站制作公司哪家好
  • 濮阳公司网站建设企业品牌网站建设绿d茶