/**
* 倒计时
*/
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("退出登录");//开启倒计时