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

安卓返回键监听:退出程序

2016-11-03 14:58 239 查看
一、指定页面情况下退出程序:

private long exitTime=0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
//System.currentTimeMillis()无论何时调用,肯定大于2000
if ((System.currentTimeMillis() - exitTime) > 2000)
{
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}

return true;
}
return super.onKeyDown(keyCode, event);
}


二、任意页面退出程序:

1.创建公共方法:

// 添加Activity到栈
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}

// 获取当前Activity(栈中最后一个添加的)
public Activity getCurrentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}

//结束栈中最后一个压入的Activity
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}

// 结束指定类名的Activity
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}

// 结束栈中指定的Activity
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}

// 结束所有Activity
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
System.exit(0);
}

// 退出应用程序
public void AppExit() {
try {
finishAllActivity();
} catch (Exception e) {
}
}


2.创建BaseActivity,在onCreate()方法和onDestroy()方法中进行如下设置:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//添加Activity到堆栈
Utils.addActivity(this);

}

@Override
protected void onDestroy() {
super.onDestroy();
//结束Activity&从栈中移除该Activity
Utils.finishActivity(this);
}


3.在退出程序页面,监听返回键,调用AppExit()方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息