我们学习android的Activity是就已经知道,随着一个新的Activity被创建,旧的Activity会被压入栈里。当我们的应用程序里有很多的Activity时,随着用户的使用,在内存充足的情况下,会有一个又一个Activity被压入栈,当我们用完了,暂时不用这个应用时,我们往往会按返回键。。那么,往往打开过多少Activity,就需要按多少次返回键。这是非常痛苦的。结合自身经验,和我查询的一些资料,我找到了几种退出应用的解决办法。
一,写一个广播。。
我们在每个Activity中,可以写一个BroadcastReceiver ,然后在退出的时候发出去一个广播,Activity在接到广播的时候,调用自身的finish()方法。比如,我们写一个BaseActivity。
package com.zhw.all_quit;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
/**
* Created with IntelliJ IDEA.
* User: Wymon Zhang
* Date: 13-7-27
* Time: 下午10:30
* 建立一个基础活动,然后可以让以后所有的Activity都继承他来实现
*/
public class BaseActivity extends Activity {
//注册一个广播的内部类,当收到关闭事件时,调用finish方法结束当前的Activity
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
@Override
public void onResume() {
super.onResume();
//在当前的activity中注册广播
IntentFilter filter = new IntentFilter();
filter.addAction(GlobalVarable.EXIT_ACTION);
this.registerReceiver(this.broadcastReceiver, filter);
}
}
然后在要退出的地方 public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 1000) {//如果两次按键时间间隔大于1000毫秒,则不退出
Toast.makeText(UiMainActivity.this, "再按一次退出程序...", Toast.LENGTH_SHORT).show();
firstTime = secondTime;//Ui更新firstTime
return true;
} else {
Intent intent = new Intent();
intent.setAction(GlobalVarable.EXIT_ACTION); // 退出
this.sendBroadcast(intent);// 发送广播
super.finish();
//退出线程,销毁静态变量
System.exit(0);
}
}
return super.onKeyUp(keyCode, event);
}
对了,需要定义一个firsttime感觉这个方法还不错。。