android-单击两次后退按钮以退出rxjava的活动

android-单击两次后退按钮以退出rxjava的活动,第1张

概述寻找一种微妙的rx方法来退出活动,同时按两次返回按钮.booleandoubleBackToExitPressedOnce=false;@OverridepublicvoidonBackPressed(){if(doubleBackToExitPressedOnce){super.onBackPressed();return;}this.doubleBackToExitPres

寻找一种微妙的rx方法来退出活动,同时按两次返回按钮.

boolean doubleBackToExitpressedOnce = false;@OverrIDepublic voID onBackpressed() {    if (doubleBackToExitpressedOnce) {        super.onBackpressed();        return;    }    this.doubleBackToExitpressedOnce = true;    Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();    new Handler().postDelayed(new Runnable() {        @OverrIDe        public voID run() {            doubleBackToExitpressedOnce=false;                               }    }, 2000);} 

解决方法:

我建议稍微不同的方法.实际上,我们正在寻找的是两次点击之间的时间. RxJava的运算符interval(TimeUnit),可以为我们提供所需的确切信息.
因此,我们有了主题和所需的退出超时.

private static final long EXIT_TIMEOUT = 2000;private Compositedisposable compositedisposable = new Compositedisposable();private PublishSubject<Boolean> backbuttonClickSource = PublishSubject.create();

在onResume中,我们将运算符添加到主题中并进行订阅.我们将结果添加到Compositedisposable中,以便以后可以将其与您活动中可能拥有的所有其他订阅一起处置.

@OverrIDeprotected voID onResume() {    super.onResume();    compositedisposable.add(backbuttonClickSource            .debounce(100, TimeUnit.MILliSECONDS)            .observeOn(AndroIDSchedulers.mainThread())            .doOnNext(new Consumer<Boolean>() {                @OverrIDe                public voID accept(@NonNull Boolean event) throws Exception {                    Toast.makeText(MainActivity.this, "Please press back once more to exit", Toast.LENGTH_SHORT).show();                }            })            .timeInterval(TimeUnit.MILliSECONDS)            .skip(1)            .filter(new Predicate<Timed<Boolean>>() {                @OverrIDe                public boolean test(@NonNull Timed<Boolean> interval) throws Exception {                    return interval.time() < EXIT_TIMEOUT;                }            })            .subscribe(new Consumer<Timed<Boolean>>() {                @OverrIDe                public voID accept(@NonNull Timed<Boolean> interval) throws Exception {                    finish();                }            }));}

我们使用去抖来消除噪音(可能是不必要的).然后,在每次单击时,我们都会向用户显示消息(无论您想要什么,为简单起见,我都使用Toast).在我们切换到主线程之前,否则将引发异常.我们跳过了第一个事件,因为否则会发出订阅和首次点击之间的时间间隔,如果时间间隔太小,则只需单击一次便会退出.所有大于我们的EXIT_TIMEOUT的间隔都将被过滤掉.最后,当我们获得足够小的时间间隔(不是第一次)时,我们就完成了活动.

然后,在onPause中,我们应该清除Compositedisposable以便不再获得点击事件.

@OverrIDeprotected voID onPause() {    super.onPause();    compositedisposable.clear();}

当然,在onBackpressed()中,我们应该将后退按钮单击转发到PublishSubject.

@OverrIDepublic voID onBackpressed() {    backbuttonClickSource.onNext(true);}
总结

以上是内存溢出为你收集整理的android-单击两次后退按钮以退出rxjava的活动全部内容,希望文章能够帮你解决android-单击两次后退按钮以退出rxjava的活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存