赞
踩
- 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(AndroidSchedulers.mainThread()) // 在doOnSubscribe()之前,不会影响上面的doOnSubscribe()
- .doOnSubscribe(new Action0() {
- @Override
- public void call() {
- name0 = "name0:" + Thread.currentThread().getName(); // 在子线程中执行
- handler.sendEmptyMessage(0);
- }
- }).subscribeOn(Schedulers.io()) // 会影响上面的doOnSubscribe()
- .observeOn(Schedulers.io())
- .subscribeOn(AndroidSchedulers.mainThread()) // 不会影响上面的doOnSubscribe()
- .subscribe(new Action1<Integer>() {
- @Override
- public void call(Integer integer) {
- name1 = "name1:" + Thread.currentThread().getName();
- handler.sendEmptyMessage(1);
- }
- });
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
总结:在doOnSubscribe()之后,使用subscribeOn()就可以指定其运行在哪中线程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。