您当前的位置: 首页 >  Java

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android -- RxJava】RxJava2.0 实践(一),后台执行耗时操作,实时通知 UI 更新

Kevin-Dev 发布时间:2019-07-11 15:48:19 ,浏览量:0

前言

本文介绍如何使用 subscribeOn/observeOn 来实现后台执行耗时任务,并通知主线程更新进度。

效果图

在这里插入图片描述

应用场景

当我们需要进行一些耗时操作,例如下载、访问数据库等,为了不阻塞主线程,往往会将其放在后台进行处理,同时在处理的过程中、处理完成后通知主线程更新 UI,这里就涉及到了后台线程和主线程之间的切换。首先回忆一下,在以前我们一般会用以下两种方式来实现这一效果:

  • 创建一个新的子线程,在其 run() 方法中执行耗时的操作,并通过一个和主线程 Looper 关联的 Handler 发送消息给主线程更新进度显示、处理结果。
  • 使用 AsyncTask,在其 doInBackground 方法中执行耗时的操作,调用 publishProgress 方法通知主线程,然后在 onProgressUpdate 中更新进度显示,在 onPostExecute 中显示最终结果。
具体实现 1. 添加依赖
	//Butter Knife
    implementation 'com.jakewharton:butterknife:10.2.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'

    //TitleBar
    implementation 'com.github.getActivity:TitleBar:8.6'

    //RxJava
    implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2. 布局文件



    

    
    

3. 逻辑代码
public class MainActivity extends BaseActivity {
    private static final String TAG = "MainActivity";

    @BindView(R.id.btn_download)
    Button mTvDownload;

    @BindView(R.id.tv_download_result)
    TextView mTvResult;

    private CompositeDisposable mCompositeDisposable = new CompositeDisposable();

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {

    }

    @OnClick(R.id.btn_download)
    public void onViewClicked() {
        startDownload();
    }

    private void startDownload() {
        final Observable observable = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                for (int i = 0; i             
关注
打赏
1658837700
查看更多评论
0.0413s