您的位置:首页 > 移动开发

安卓开发 按两次返回键退出APP 2个方法

2014-05-19 08:36 330 查看
点击两次再退出,可以避免误点引起退出,也可以提升用户体验。

第一种:利用线程延时实现:

private int mBackKeyPressedTimes = 0;

@Override

public void onBackPressed()
{

if
(mBackKeyPressedTimes == 0) {

Toast.makeText(this,
"再按一次退出程序 ", Toast.LENGTH_SHORT).show();

mBackKeyPressedTimes
= 1;

new
Thread() {

@Override

public
void run() {

try
{

Thread.sleep(2000);

}
catch (InterruptedException e) {

e.printStackTrace();

}
finally {

mBackKeyPressedTimes
= 0;

}

}

}.start();

return;

else{

this.activity.finish();

}

}

super.onBackPressed();

}

第二种:利用计算时间差实现 (个人觉得这种方式较为简单,而且不容易发生异常,代码较为安全)

private long exitTime = 0;

public void ExitApp()

{

if
((System.currentTimeMillis() - exitTime) > 2000)

{

Toast.makeText(this.activity,
"再按一次退出程序", Toast.LENGTH_SHORT).show();

exitTime
= System.currentTimeMillis();

}
else

{

this.activity.finish();

}

实现的思路如下:

  首先定义一个布尔变量,赋初始值false。然后监听退出按钮,点击退出按钮时,如果该布尔变量值为false,则把这个变量置为true;如果该变量为true,则退出程序。最后定义一个时间任务,2秒执行一次,如果布尔变量为true,2秒内没有点击返回键,则置为false。

  这样,在点击第一次退出时,仅仅改变布尔值变量,而不会退出,2秒内进行第二次点击才会退出。如果用户点击了一次,那么2秒之后布尔变量又被置为false,只有2秒内的两次点击才会退出程序。

代码如下:
private static Boolean isQuit = false;
Timer timer = new Timer();
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isQuit == false) {
isQuit = true;
Toast.makeText(getBaseContext(), "再按一次退出", Toast.LENGTH_SHORT).show();
TimerTask task = null;
task = new TimerTask() {
@Override
public void run() {
isQuit = false;
}
};
timer.schedule(task, 2000);
} else {
finish();
System.exit(0);
}
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: