当前位置:   article > 正文

Rxandroid中doOnSubscribe(),如何指定其运行的线程?_安卓doonsubscribe

安卓doonsubscribe
  1. public class MainActivity extends AppCompatActivity {
  2. Button btn;
  3. TextView txt;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. btn = (Button) findViewById(R.id.btn);
  9. txt = (TextView) findViewById(R.id.txt);
  10. txt.setVisibility(View.GONE);
  11. btn.setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  14. test();
  15. }
  16. });
  17. }
  18. private String name0 = null;
  19. private String name1 = null;
  20. private String name2 = null;
  21. private Handler handler = new Handler() {
  22. @Override
  23. public void handleMessage(Message msg) {
  24. super.handleMessage(msg);
  25. if (msg.what == 0) {
  26. Toast.makeText(getApplicationContext(), name0, Toast.LENGTH_SHORT).show();
  27. } else if (msg.what == 1) {
  28. Toast.makeText(getApplicationContext(), name1, Toast.LENGTH_SHORT).show();
  29. } else if (msg.what == 2) {
  30. Toast.makeText(getApplicationContext(), name2, Toast.LENGTH_SHORT).show();
  31. }
  32. }
  33. };
  34. /**
  35. * 如果在doOnSubscribe()之后指定了subscribeOn(),它决定了doOnSubscribe()在哪种线程中执行。
  36. * (1)doOnSubscribe()之前的subscribeOn()不会影响它。
  37. * (2)doOnSubscribe()之后的subscribeOn(),且是最近的才会影响它。
  38. */
  39. private void test() {
  40. Observable.create(new Observable.OnSubscribe<Integer>() {
  41. @Override
  42. public void call(Subscriber<? super Integer> subscriber) {
  43. subscriber.onNext(2323);
  44. name2 = "name2:" + Thread.currentThread().getName();
  45. handler.sendEmptyMessage(2);
  46. }
  47. }).subscribeOn(AndroidSchedulers.mainThread()) // 在doOnSubscribe()之前,不会影响上面的doOnSubscribe()
  48. .doOnSubscribe(new Action0() {
  49. @Override
  50. public void call() {
  51. name0 = "name0:" + Thread.currentThread().getName(); // 在子线程中执行
  52. handler.sendEmptyMessage(0);
  53. }
  54. }).subscribeOn(Schedulers.io()) // 会影响上面的doOnSubscribe()
  55. .observeOn(Schedulers.io())
  56. .subscribeOn(AndroidSchedulers.mainThread()) // 不会影响上面的doOnSubscribe()
  57. .subscribe(new Action1<Integer>() {
  58. @Override
  59. public void call(Integer integer) {
  60. name1 = "name1:" + Thread.currentThread().getName();
  61. handler.sendEmptyMessage(1);
  62. }
  63. });
  64. }
  65. }


总结:在doOnSubscribe()之后,使用subscribeOn()就可以指定其运行在哪中线程。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/251105
推荐阅读
相关标签
  

闽ICP备14008679号