Rxandroid中map等操作,如何切换线程

来源:互联网 发布:四柱预测软件 编辑:程序博客网 时间:2024/06/16 04:09
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 nameMap = 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(), nameMap, Toast.LENGTH_SHORT).show();            }        }    };    /**     */    private void test() {        Observable.create(new Observable.OnSubscribe<Integer>() {            @Override            public void call(Subscriber<? super Integer> subscriber) {                subscriber.onNext(2323);                name0 = "name0:" + Thread.currentThread().getName();                handler.sendEmptyMessage(0);            }        }).subscribeOn(Schedulers.io())        .observeOn(Schedulers.io()) // 这里会影响到subscribe()所在的线程        .map(new Func1<Integer, String>() {            @Override            public String call(Integer integer) {                nameMap = "nameMap:" + Thread.currentThread().getName(); // 子线程                handler.sendEmptyMessage(2);                return null;            }        })        .subscribe(new Action1<String>() {            @Override            public void call(String string) {                name1 = "name1:" + Thread.currentThread().getName(); // 子线程                handler.sendEmptyMessage(1);            }        });    }}


注意:observeOn()指定的是它之后的操作所在的线程。如果由多次切换线程的需求,只要在每个想要切换线程的位置调用一次observeOn()即可。



private void test() {        Observable.create(new Observable.OnSubscribe<Integer>() {            @Override            public void call(Subscriber<? super Integer> subscriber) {                subscriber.onNext(2323);                name0 = "name0:" + Thread.currentThread().getName();                handler.sendEmptyMessage(0);            }        }).subscribeOn(Schedulers.io())        .observeOn(AndroidSchedulers.mainThread())                .map(new Func1<Integer, String>() { // 主线程                    @Override                    public String call(Integer integer) {                        nameMap = "nameMap:" + Thread.currentThread().getName();                        handler.sendEmptyMessage(2);                        return null;            }        })        .subscribe(new Action1<String>() { // 主线程            @Override            public void call(String string) {                name1 = "name1:" + Thread.currentThread().getName();                handler.sendEmptyMessage(1);            }        });    }





0 0
原创粉丝点击