一些Android应用退出的时候,要按两次back按键,一直很好奇,总算是发现怎么实现的了。
实现代码:
package com.example.com.cb.test;
import java.util.Timer;
import java.util.TimerTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// 是否退出程序
private static Boolean isExit = false;
// 定时触发器
private static Timer tExit = null;
// 鼠标按键释放
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isExit == false) {
isExit = true;
if (tExit != null) {
tExit.cancel();
}
// 重新实例一个定时器
tExit = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
isExit = false;
}
};
Toast.makeText(this, "在按一次退出程序", Toast.LENGTH_SHORT).show();
// 延时两秒触发task任务
tExit.schedule(task, 2000);
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
实现具体:
看代码很明显就是对Timer这个类的使用.
Timer类说明:

cancel()方法:

schedule:

执行流程:
当你按下back按键后,Toast一下,然后会在当前时间+delay后启动task任务,当启动task任务后,isExit依然是false,是不能退出的,不启动task任务,isExit是true,
在按下一back按键后,由于isExit是true,就执行退出操作.
本文详细解析了Android应用中实现双击退出功能的原理,通过使用Timer类来控制退出流程,确保用户在两次点击back键后才能真正退出应用,提供了深入的技术解读。
765

被折叠的 条评论
为什么被折叠?



