Rxandroid中doOnSubscribe()执行默认情况下所在的线程
2016-05-16 22:04
381 查看
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 String nameInThread = 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(); } else { Toast.makeText(getApplicationContext(), nameInThread, Toast.LENGTH_SHORT).show(); } } }; /** * 默认情况下subcribe发生的线程决定了,doOnSubscribe()执行所在的线程。 * 这里nameInThread和name0的值是相等的。都是在同一个子线程中执行,这里就是new Thread()这个线程。 */ private void test() { new Thread(new Runnable() { @Override public void run() { nameInThread = "nameInThread:" + Thread.currentThread().getName(); handler.sendEmptyMessage(0x99); 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(Schedulers.io()) .doOnSubscribe(new Action0() { @Override public void call() { name0 = "name0:" + Thread.currentThread().getName(); handler.sendEmptyMessage(0); } }) .observeOn(Schedulers.io()) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { name1 = "name1:" + Thread.currentThread().getName(); handler.sendEmptyMessage(1); } }); } }).start(); } }
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(); } } }; /** * subcribe发生在main线程中,所以这里的name0的值就为main。也就是主线程中。 */ 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(Schedulers.io()) .doOnSubscribe(new Action0() { @Override public void call() { name0 = "name0:" + Thread.currentThread().getName(); handler.sendEmptyMessage(0); } }) .observeOn(Schedulers.io()) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { name1 = "name1:" + Thread.currentThread().getName(); handler.sendEmptyMessage(1); } }); }
相关文章推荐
- Android开发60条技术经验总结
- android开发第一次心的
- Android学习之一
- Android 手把手教您自定义ViewGroup(一)
- android如何在xml中引用内部类的View
- Android常用控件
- Android防止事件重复提交
- Android开发自定义控件实现一个圆形进度条【带数值和动画】
- Android 动画详解
- Android 开源项目浅读-------SwipeMenuListView-重写,第七章,菜单停留和暂停响应
- android天气预报源码
- 记使用Android SQLite遇到的小问题
- Android 连续点击实现一些隐蔽功能
- ViewGroup常用布局操作
- android battery stats
- Android监听回调的一些理解
- Intent
- Android沉浸式通知栏
- Android 基于google Zxing实现对手机中的二维码进行扫描
- android开发二--------高德地图定位