为了防止用户误触返回键,还在使用 “再按一次退出” 吗?
追求简约与极速的时代,这种交互显然已经Out了嘛~
下面我们来看一下如何用四行代码实现优雅退出。
代码实现
第一步,声明一个Runnable
private Runnable mFinishRunnable = this::finish;
第二步,重写Activity的onBackPressed()方法
@Override
public void onBackPressed() {
getWindow().getDecorView().postDelayed(mFinishRunnable,Constants.VALUE_FINISH_DELAYED_TIME);
moveTaskToBack(true);
}
第三步,重写Activity的onStart()方法
@Override
protected void onStart() {
super.onStart();
getWindow().getDecorView().removeCallbacks(mFinishRunnable);
}
大功告成,懂了的可以点个👍撤了。
详细说明
// 用于 finish 当前 Activity 的 Runnable ;
private Runnable mFinishRunnable = new Runnable() {
@Override
public void run() {
finish();
}
};
/**
* 按返回键时延迟执行 mFinishRunnable ;
* 并将当前Activity隐藏在后台, 看起来就像退出了一样。
*/
@Override
public void onBackPressed() {
// super.onBackPressed(); //注释掉 super 代码.
// 10秒之后才会执行 mFinishRunnable .
getWindow().getDecorView().postDelayed(mFinishRunnable, 1000 * 10);
moveTaskToBack(true);
}
/**
* 用户可能误触了返回键, 重回Activity后应该取消延迟执行的 mFinishRunnable .
*/
@Override
protected void onStart() {
super.onStart();
getWindow().getDecorView().removeCallbacks(mFinishRunnable);
}
仔细阅读注释,就是酱紫~
用户按了返回键后,直接“退出”。在指定时间内可以随时回到应用,就好像他只是按了Home键一样。