RxAndroid2.0 倒计时简单封装
来源:互联网 发布:mac iphone照片导出 编辑:程序博客网 时间:2024/06/05 04:35
/** * 倒计时 */public abstract class ThreadCountDown { protected boolean end; protected Observable<Integer> countdown; protected Observer<Integer> observer; //开始倒计时 public void start(final int timeMin) { end = false; countdown = RxUtil.countDown(timeMin); loadInit(); observer = new Observer<Integer>() { public Disposable d; @Override public void onSubscribe(Disposable d) { this.d = d; } @Override public void onNext(Integer value) {// LogUtil.i("执行中---" + value); if (!end) onProgress(value); else d.dispose(); //如果标记为结束 停止轮询 } @Override public void onError(Throwable e) { e.printStackTrace(); } @Override public void onComplete() { if (end) return;//已经结束 不调用了 ThreadCountDown.this.onComplete(); } }; countdown.subscribe(observer); } //倒计时完成,手动调用后 轮询将会停止 public void onComplete() { this.end = true; } //是否完成 protected boolean isComplete() { return end; } //倒计时进度 主线程 public abstract void onProgress(Integer value); //倒计时初始化 public abstract void loadInit();}
public class RxUtil { public static Observable<Integer> countDown(final int time) { //延时0秒 轮询间隔1秒 轮询次数 time+1 return Observable.interval(0, 1, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread(), false, 100) .map(new Function<Long, Integer>() { @Override public Integer apply(Long aLong) throws Exception { return time - aLong.intValue(); } }) .take(time + 1); // .subscribeOn(AndroidSchedulers.mainThread())// .observeOn(AndroidSchedulers.mainThread()) }}
//使用
/** * 退出登录框 */public class ExitloginDialog extends ThreadCountDown { private static final ExitloginDialog exitLogin = new ExitloginDialog(); private AlertDialog gloDialog; private String title; private String content; public static ExitloginDialog getInstance() { return exitLogin; } //开始倒计时 10秒后退出程序 或者手动退出 public void show(String title) { if (isShow()) return; this.title = title; this.content = title; super.start(10); } public boolean isShow() { if (gloDialog != null && gloDialog.isShowing()) return true; return false; } @Override public void onProgress(Integer value) { //主线程 倒计时结果 可以在这更新ui } @Override public void loadInit() { AlertDialog.Builder builder = new AlertDialog.Builder(BaseApplication.getApplication().getActivity()); builder = builder.setMessage(content); builder.setTitle(title); builder.setPositiveButton("立即退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); onComplete(); } }); gloDialog = builder.create(); //设置为全局,不依赖activity gloDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); gloDialog.setCancelable(false); gloDialog.setCanceledOnTouchOutside(false); gloDialog.show(); } @Override public void onComplete() { super.onComplete(); system.exit(0); gloDialog = null; }}
ExitloginDialog instance = ExitloginDialog.getInstance(); instance.show("退出登录");//开启倒计时
阅读全文
0 0
- RxAndroid2.0 倒计时简单封装
- iOS 简单的倒计时封装
- RxAndroid2 / RxJava2简单的CompletableObserver
- RxAndroid2.0使用概述
- Rxandroid2.0 使用一
- RxAndroid2.0实现RxBus
- 【积淀】封装一个简单的倒计时组件
- 获取验证码倒计时类简单封装
- rxjava2+rxandroid2+retrofit2 封装网络请求
- RXAndroid2.0初学习一
- RXAndroid2.0初学习二
- RXAndroid2.0初学习三
- RXAndroid2.0初学习四
- Retrofit2+RxAndroid2进行简单的网络请求
- as3.0 简单时间倒计时
- Retrofit2.0+RxAndroid2.0实现网络下载
- 简单倒计时
- 简单倒计时
- ubuntu 创建本地deb软件包时,对Release文件做gpg签名
- android 开发过程中为什么android内部类会报错,求大神们指点啊
- loadrunner: failed to deliver a p2p message from parent to ...
- PHPstorm 忽略IDE中打开的文件夹
- postgresql 日志配置
- RxAndroid2.0 倒计时简单封装
- 【HTML5】<input>标签中的Require必填项
- 347. Top K Frequent Elements
- Linux 大文件分割split
- ubuntu + cuda8.0 + tensorflow最简单的安装方式
- 基于Ugui的窗口拖拽功能
- laravel下载安装
- var与ES6中const、let声明的变量的区别
- 解压缩安装mysql