『壹』 rxandroid onsubscribe什麼時候調用
public class MainActivity extends AppCompatActivity {
Button btn;
TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
txt = (TextView) findViewById(R.id.txt);
txt.setVisibility(View.GONE);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
test();
}
});
}
private String name0 = null;
private String name1 = null;
private String name2 = null;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
Toast.makeText(getApplicationContext(), name0, Toast.LENGTH_SHORT).show();
} else if (msg.what == 1) {
Toast.makeText(getApplicationContext(), name1, Toast.LENGTH_SHORT).show();
} else if (msg.what == 2) {
Toast.makeText(getApplicationContext(), name2, Toast.LENGTH_SHORT).show();
}
}
};
/**
* 如果在doOnSubscribe()之後指定了subscribeOn(),它決定了doOnSubscribe()在哪種線程中執行。
* (1)doOnSubscribe()之前的subscribeOn()不會影響它。
* (2)doOnSubscribe()之後的subscribeOn(),且是最近的才會影響它。
*/
private void test() {
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(2323);
name2 = "name2:" + Thread.currentThread().getName();
handler.sendEmptyMessage(2);
}
}).subscribeOn(AndroidSchelers.mainThread()) // 在doOnSubscribe()之前,不會影響上面的doOnSubscribe()
.doOnSubscribe(new Action0() {
@Override
public void call() {
name0 = "name0:" + Thread.currentThread().getName(); // 在子線程中執行
handler.sendEmptyMessage(0);
}
}).subscribeOn(Schelers.io()) // 會影響上面的doOnSubscribe()
.observeOn(Schelers.io())
.subscribeOn(AndroidSchelers.mainThread()) // 不會影響上面的doOnSubscribe()
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
name1 = "name1:" + Thread.currentThread().getName();
handler.sendEmptyMessage(1);
}
});
}
}
總結:在doOnSubscribe()之後,使用subscribeOn()就可以指定其運行在哪中線程。
『貳』 rxandroid 生命周期什麼時候調用
Dagger2:依賴注入並不是什麼新技術,但是使用在Android確實一個新的嘗試。AndroidApp越來越被當成嚴肅的大型項目來構建,很多在以前大型伺服器開發上使用的技術都被應用到了移動開發。Android開發分模塊開發,使用Dagger來松耦合模塊。特別值得一體的是,Dagger2現在由Google親自接管。Dagger‡。MVP:因為Android並沒有嚴格的業務和界面區分,項目一復雜,就很容易使代碼陷入混亂。現在Android開發社區對MVP模式討論越來越熱,覺得MVP是非常適合AndroidAPP開發。MVPforAndroid:。RxAndroid:函數響應式編程(FunctionalReactiveProgramming)也不是新內容,RxAndroid把Rxjava帶到Android環境中。很多時候,編寫Android程序,你也可以看成是數據的處理和流動,換一種思想編程,曾經看起來很棘手的問題,瞬間就很優雅的解決了:ReactiveX/RxAndroid。MVVM:這是因為開始官方支持DataBinding,把MVVM直接帶到Android中。數據綁定在WindowsWPF和Web已經非常常見,它非常高效的開發效率,讓你只關心你的數據和業務。這也對Android開發來說,無疑是一個非常重大的影響:androidUI設計MVVM設計模式討論?。插件化:針對大型Android項目,很多App開始使用插件來分模塊構建相對獨立的功能。Hybrid:完全使用HTML5開發App,目前還不成熟。但是折中方案在很多情況下是非常適合的,典型的就是微信,大部分信息展示都是通過H5來完成,同時通過Hybird方式,把Web和Native打通,提供給網頁訪問本地資源的能力。
『叄』 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。
『肆』 rxandroid和volley哪個好用
兩個不一樣的東西。rx是響應式編程,讓代碼更有條理性,針對復雜邏輯來說很好用。volley是谷歌官方出來的網路框架,針對大量的小數據請求應用。
『伍』 誰來講講Rxjava,rxandroid中的操作符的作用
1.去官網大致看一遍各個操作符2.部分區分不清(比如map與flatmap)的面向github或者stackoverflow找答案,用英文哦,否則會被網路與CSDN的渣文章給擾亂3.去github等社區找android示例,比如GitHub-lzyzsd/Awesome-RxJava:RxJavaresour
『陸』 誰來分享一下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寫出來並與原來演算法進行對比(代碼量與可讀性)即可,最後整理成筆記博客等進行保存。
『柒』 rxandroid 是怎麼實現子線程和主線程通信
android里線程間通信,到現在我看到的實現都是用Handler,RxAndroid也不例外。
『捌』 rxandroid對rxjava做了哪些優化
ReactiveX的每種編程語言的實現都實現了一組操作符的集合。不同的實現之間有很多重疊的部分,也有一些操作符只存在特定的實現中。每種實現都傾向於用那種編程語言中他們熟悉的上下文中相似的方法給這些操作符命名。
本文首先會給出ReactiveX的核心操作符列表和對應的文檔鏈接,後面還有一個決策樹用於幫助你根據具體的場景選擇合適的操作符。最後有一個語言特定實現的按字母排序的操作符列表。
如果你想實現你自己的操作符,可以參考這里:實現自定義操作符
創建操作
用於創建Observable的操作符
Create — 通過調用觀察者的方法從頭創建一個Observable
Defer — 在觀察者訂閱之前不創建這個Observable,為每一個觀察者創建一個新的Observable
Empty/Never/Throw — 創建行為受限的特殊Observable
From — 將其它的對象或數據結構轉換為Observable
Interval — 創建一個定時發射整數序列的Observable
Just — 將對象或者對象集合轉換為一個會發射這些對象的Observable
Range — 創建發射指定范圍的整數序列的Observable
Repeat — 創建重復發射特定的數據或數據序列的Observable
Start — 創建發射一個函數的返回值的Observable
Timer — 創建在一個指定的延遲之後發射單個數據的Observable