androidrx
㈠ 怎么停止rxandroid 2.0
ReactiveX的每种编程语言的实现都实现了一组操作符的集合。不同的实现之间有很多重叠的部分,也有一些操作符只存在特定的实现中。每种实现都倾向于用那种编程语言中他们熟悉的上下文中相似的方法给这些操作符命名。
㈡ android 中各种框架Rxjava,RxBus,dagger这些真的在工作中敢用吗
RxJava目前项目在用还是很稳定的
目前网络用的是Rxjava+ReTrofit+okHttp这些框架已经很成熟了完全可以引入项目
㈢ 谁来分享一下RxJava,RxAndroid,RxBind,RxBus
1. 去官网大致看一遍各个操作符
2. 部分区分不清(比如map与flatmap)的面向github或者stackoverflow找答案,用英文哦,否则会被网络与CSDN的渣文章给扰乱
3. 去github等社区找android示例,比如 GitHub - lzyzsd/Awesome-RxJava: RxJava resources
4. 自己去写实际项目或者编程题,比如去oj平台(比如newcoder)用rxjava做编程题,这个非常有助于加深对流程化与可观察的理解。虽然平台上不可能用第三方lib,但是自己只用rxjava写出来并与原来算法进行对比(代码量与可读性)即可,最后整理成笔记博客等进行保存。
㈣ Android RxJava使用完对象之后怎么处理
事件是传递的最小单位,可以把任何类作为一个事件。
RxBus代码如下:
/** * Author: wangjie * Email: [email protected] * Date: 6/11/15. */public class RxBus { private static final String TAG = RxBus.class.getSimpleName(); private static RxBus instance; public static boolean DEBUG = false; public static synchronized RxBus get() { if (null == instance) { instance = new RxBus(); } return instance; } private RxBus() { } private ConcurrentHashMap<Object, List<Subject>> subjectMapper = new ConcurrentHashMap<>(); @SuppressWarnings("unchecked") public <T> Observable<T> register(@NonNull Object tag, @NonNull Class<T> clazz) { List<Subject> subjectList = subjectMapper.get(tag); if (null == subjectList) { subjectList = new ArrayList<>(); subjectMapper.put(tag, subjectList); } Subject<T, T> subject; subjectList.add(subject = PublishSubject.create()); if (DEBUG) Log.d(TAG, "[register]subjectMapper: " + subjectMapper); return subject; } public void unregister(@NonNull Object tag, @NonNull Observable observable) { List<Subject> subjects = subjectMapper.get(tag); if (null != subjects) { subjects.remove((Subject) observable); if (ABTextUtil.isEmpty(subjects)) { subjectMapper.remove(tag); } } if (DEBUG) Log.d(TAG, "[unregister]subjectMapper: " + subjectMapper); } public void post(@NonNull Object content) { post(content.getClass().getName(), content); } @SuppressWarnings("unchecked") public void post(@NonNull Object tag, @NonNull Object content) { List<Subject> subjectList = subjectMapper.get(tag); if (!ABTextUtil.isEmpty(subjectList)) { for (Subject subject : subjectList) { subject.onNext(content); } } if (DEBUG) Log.d(TAG, "[send]subjectMapper: " + subjectMapper); }}
如上述代码,RxBus只提供了register、unregister、post三个方法。
这里又加入了一个tag的概念,也可以理解为channel,注册Subject、反注册Subject和post事件的时候都需要这个tag,只有tag一致才能正常接收到事件。
比如有一个事件类HelloEvent,这个事件的作用是接收到后toast一个提示“hello”,如果两个Activity都注册了这个HelloEvent事件,但是没有tag去限制,一旦post了一个helloEvent事件后,两个Activity都会收到这个事件,导致两个Activity都会toast。如果使用tag,post这个HelloEvent的时候可以设置这个tag,只有register时也使用了这个tag才会接收到这个event。
2. 在Present(如Activity的onCreate)中注册一个Observer(以下以发送一个String类型的事件为例)
Observable<String> addOb = RxBus.get() .register("addFeedTag", String.class); addOb.observeOn(AndroidSchelers.mainThread()) .subscribe(s -> { // todo: Accept event and process here });
如上,注册了一个String类型的事件,事件的tag是“addFeedTag”,用来增加一个Feed。使用RxAndroid在Action1中处理接收到的这个事件。
3. 在任何地方发送一个事件:
RxBus.get().post("addFeedTag", "hello RxBus!");
这里发送了一个tag为“addFeedTag”的String类型的事件。
4. 反注册Observer:
RxBus.get().unregister("addFeedTag", addOb);
注意:这里的Tag都为“addFeedTag”。
下面使用注解的方式更简单方便地使用RxBus(嗯-。-这里才是重点)。
首先来看下使用注解后的代码:
1. 注册Observer
这一步可以省略掉。
2. 发送一个事件(这里我们换一个事件:FeedItemCl3. ickEvent,我们定义这个事件是用来处理当Feed被点击后的事件)
RxBus.get().post(new FeedItemClickEvent().setPosition(position).setFeed(feed));
3. 接收事件,然后处理
1 @Accept2 public void onPostAccept(Object tag, FeedItemClickEvent event) {3 Logger.d(TAG, "onPostAccept event: " + event);4 Feed feed = event.getFeed();5 // 跳转到feed详情页面...6 }
如上,这里只需要编写一个方法,加上Accept注解,然后在方法中进行事件处理即可。
注意:方法名可以任意
方法参数一:必须为Object类型的tag;
方法参数二,如果这个方法只接收一种事件,则写明具体的事件类型,如上;如果这个方法接收多种事件,则类型需要为Object。
4. 反注册Observer
这一步也可以省略掉。
接收多种事件:
@Accept( acceptScheler = AcceptScheler.NEW_THREAD, value = { @AcceptType(tag = ActionEvent.CLOSE, clazz = String.class), @AcceptType(tag = ActionEvent.BACK, clazz = String.class), @AcceptType(tag = ActionEvent.EDIT, clazz = String.class), @AcceptType(tag = ActionEvent.REFRESH, clazz = String.class) } ) public void onPostAccept(Object tag, Object actionEvent) { Logger.d(TAG, "[ActionEvent]onPostAccept action event name: " + actionEvent); // todo: Accept event and process here (in new thread) }
这里@Accept注解中设置了acceptScheler为AcceptScheler.NEW_THREAD,指明方法运行在子线程中.
value中指明了接收的事件类型,这里表示这个方法接收4种类型的事件:CLOSE, BACK, EDIT, REFRESH.
注解解释:
@Accept注解
acceptScheler: 指定被注解的方法运行的Scheler。
value[]: AcceptType注解数组,用于指定接收事件的tag和class。
@AcceptType注解:
tag: 接收事件的tagclazz: 接收事件的类型
AcceptScheler:
详情见:rx.schelers.Schelers和rx.android.schelers.AndroidSchelers
如果设置的是AcceptScheler.EXECUTOR或AcceptScheler.HANDLER,则需要在Application中配置Executor和Handler:/** * Author: wangjie * Email: [email protected] * Date: 6/15/15. */public class MyApplication extends Application { private Executor acceptExecutor = Executors.newCachedThreadPool(); private Handler handler = new Handler(Looper.getMainLooper()); @Override public void onCreate() { super.onCreate(); RxBus.DEBUG = true; DefaultAcceptConfiguration.getInstance().registerAcceptConfiguration(new DefaultAcceptConfiguration.OnDefaultAcceptConfiguration() { @Override public Executor applyAcceptExecutor() { return acceptExecutor; } @Override public Handler applyAcceptHandler() { return handler; } }); }}
㈤ rxandroid和volley哪个好用
两个不一样的东西。rx是响应式编程,让代码更有条理性,针对复杂逻辑来说很好用。volley是谷歌官方出来的网络框架,针对大量的小数据请求应用。
㈥ android rxjava何时用到
RxJava到底是什么?使用RxJava到底有什么好处呢?其实RxJava是ReactiveX中使用Java语言实现的版本,目前ReactiveX已经实现的语言版本有:
Java: RxJava
JavaScript: RxJS
C#: Rx.NET
C#(Unity): UniRx
Scala: RxScala
Clojure: RxClojure
C++: RxCpp
Ruby: Rx.rb
Python: RxPY
Groovy: RxGroovy
JRuby:RxJRuby
Kotlin: RxKotlin
可以看出ReactiveX在开发应用中如此的火爆。那到底什么是ReactiveX呢?简单来说,ReactiveX就是”观察者模式+迭代器模式+函数式编程”,它扩展了观察者模式,通过使用可观察的对象序列流来表述一系列事件,订阅者进行占点观察并对序列流做出反应(或持久化或输出显示等等);借鉴迭代器模式,对多个对象序列进行迭代输出,订阅者可以依次处理不同的对象序列;使用函数式编程思想(functional programming),极大简化问题解决的步骤。
㈦ android的rxjava可以网络请求吗
一般使用socket长连接,如果是用http的方式的话貌似不太好弄。如果客户端程序不是基于webview等网页模式来开发的话一般是用的socket作为通讯。 如果是使用网页模式,服务器端提供web服务的话可以通过ajax的访问,通过一些手段,比如没有消息之前断开客户端连接这些,总的来说就是实现长连接。
㈧ android-sdk_rXX xx是什么意思
是sdk的版本
㈨ 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。
㈩ 谁来讲讲Rxjava,rxandroid中的操作符的作用
1.去官网大致看一遍各个操作符2.部分区分不清(比如map与flatmap)的面向github或者stackoverflow找答案,用英文哦,否则会被网络与CSDN的渣文章给扰乱3.去github等社区找android示例,比如GitHub-lzyzsd/Awesome-RxJava:RxJavaresour