android检测退出

    一些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,就执行退出操作.

  

 

 

猜你喜欢

转载自cb123456.iteye.com/blog/2228525