2016-07-18 109 views
5

Ho fatto ricerche su questo, e so che RXJava sta usando il modello osservabile, e Bull si basa su un esecutore. Quale quadro sarebbe utile per gestire le attività che devono essere eseguite in sequenze?qual è la differenza tra RxJava e Bulloni?

Ho sentito parlare dell'uso di singleExecutor, code, concatenazione di asynctask e questi due framework. Ho visto più persone che usano bulloni contro rxjava ma sono curioso di sapere delle esperienze tra i due.

Grazie!

risposta

13

Ho utilizzato entrambi in diversi progetti e ho eseguito una migrazione da Bulloni a RxJava. La semplice risposta alla tua domanda

Quale struttura sarebbe utile per la gestione delle attività che devono essere eseguite in sequenze?

È possibile utilizzare facilmente entrambi i framework per eseguire questa operazione. Entrambi:

  • dei compiti che ad essere concatenati uno dopo l'altro
  • Attiva l'esecutore, ecc da specificare per ogni attività
  • Consenti errori per essere acquisiti e trattati in un momento opportuno

Tuttavia, questo è il punto in cui la funzionalità Bulloni termina praticamente mentre RxJava continua a dare. Il vero potere di RxJava risiede nei suoi operatori che, tra le altre cose, ti permettono di trasformare, combinare i dati del filtro &.

La curva di apprendimento per entrambi i quadri è ripida, RxJava è più ripido ... ma è notevolmente più potente.

Per inciso i conteggi metodo per le due biblioteche sono

RxJava - 4605 
Bolts - 479 
+0

Grazie !! è stata una facile transizione dai bulloni a rxjava? qualche insidia che potrei incontrare? – reidisaki

+0

Ci sono molte insidie ​​che incontrerai in rx-java. È molto potente ed espressivo. Personalmente l'operatore 'cache' non ha fatto esattamente quello che mi sarei aspettato. Inoltre, è difficile scrivere 'Observable's e' Operator's che rispettano la contropressione. – Andy

7

Jahnold ha dato un'ottima panoramica e volevo solo aggiungere un po 'più di informazioni:

Prima di tutto, entrambi i bulloni e RxJava sono Implementazioni Java dei modelli di programmazione asincrona di Microsoft: Bolts = Task Parallelization Library e RxJava = Reactive Extensions. Entrambi consentono inoltre il concatenamento e il cambio di thread molto facilmente (sfondo < -> thread principale).

Il modo migliore per confrontare i bulloni/TPL con RxJava/Rx è che Bulloni è per i singoli valori asincroni (promesse) e RxJava è per gli elenchi di valori asincroni (flussi).

  • Quindi Bulloni sarebbe un bene per lavoro di fondo che restituisce un singolo valore come ad esempio le richieste di rete generale, la lettura dei file dal disco, ecc e
  • RxJava sarebbe un bene per le cose che restituiscono più valori come sottoscrive coordinate GPS, eventi onClick, ecc

Quindi, per rispondere meglio alla tua domanda:

Quale quadro sarebbe un bene per la gestione di attività di tha Devo essere fatto in sequenze?

Dovrei chiedere un altro: intendi che il tuo lavoro sia un risultato singolo o più risultati?

+0

sarebbero risultati singoli per alcune richieste e multipli per altri ... scusa lo so che non aiuta. – reidisaki

+0

Non c'è motivo per cui non puoi usare entrambi! –

+0

@GrantlandChew Anche se la risposta non è distorta nei confronti di Bulloni, sarebbe stato utile scrivere una riga di declinazione di responsabilità. (Risposta molto buona btw. Ero nello stesso dubbio e andrò con Bulloni). –

0

Queste due librerie risolvono due problemi diversi.

Bulloni

Bulloni semplifica la programmazione asincrona trasparente spingendo codice a un thread in background. I bulloni impiegano anche una buona dose di tentativi per ridurre il nesting di codice antiestetico che produce un formato simile a una piramide nidificato.

Pertanto, se si desidera esaminare in modo specifico i problemi asincroni (multi-threading), i bulloni sono le soluzioni più solide. Bulloni è anche efficace per alleggerire il nesting del codice e il boilerplate di callback ed è probabilmente un'ottima soluzione per cercare di risolvere i problemi di callback.

RxJava

RxJava è specificamente progettato per supportare un paradigma di programmazione reattivo. La programmazione reattiva è un'alternativa alla programmazione imperativa in Java. Potresti scegliere di passare a un paradigma di programmazione reattiva per vari motivi, di cui ce ne sono molti. Se vuoi migrare il tuo codice al modello di programmazione reattivo, o se vuoi usare reattivo nei tuoi progetti greenfield, considera l'utilizzo di RxJava - lo standard reattivo di fatto nel mondo Java.

Reactive risolve anche il problema di programmazione asincrona, oltre a ridurre il boilerplate di richiamata tramite generici. Ma non dovrebbe essere usato solo per risolvere quei problemi. Ad esempio, la capacità dei bulloni di risolvere la struttura del codice piramidale annidato lo rende una soluzione più praticabile per la programmazione asincrona. D'altra parte, se si utilizza reattivo tramite RxJava, i problemi asincroni sono già risolti, quindi non è necessario introdurre Bulloni.