在每个App中,基本都有退出提示,注意:这里不仅是一个弹出框,而是真正意义上的退出activity,这里带大家简单实现一下这个简单的功能吧~
应用程序Activity管理类:用于Activity管理和应用程序退出
这个类适用于管理activity的 删除啊 添加啊 全部删除啊 这些的!
---------------AppManager--------------------
import java.util.Stack;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
/**
* 应用程序Activity管理类:用于Activity管理和应用程序退出
* @version 1.0
*/
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 单一实例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈 */
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 结束所有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();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) { }
}
}
为了方便起见,我们在代码量灰常多的情况下,我们可以写一个BaseActivity,在这个BaseActivity中,我们可以将我们所写的所有Activity视图继承BaseActivity。
-------------BaseActivity--------------
public abstract class BaseActivity extends SlidingFragmentActivity{
//替换页面
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub // 设置侧拉条目布局
//添加Activity到堆栈
AppManager.getAppManager().addActivity(this);
setBehindContentView(R.layout.menu_frame);
}
@Override
protected void onDestroy() {
super.onDestroy();
//结束Activity&从堆栈中移除
AppManager.getAppManager().finishActivity(this);
}
}
这里作为抽象,可以适当添加一些抽象方法以供子类继承实现。
接下来就是关键性代码了,监听用户退出事件,调用并销毁所有activity
---------MainActivity-----------------关键性代码 这里只贴出关键方法,要自己加了,因为本人的项目也是太多,这里不好做一些展示
/**
* 监听返回--是否退出程序
*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
boolean flag = true;
if (keyCode == KeyEvent.KEYCODE_BACK) {
// 是否退出应用
CommonUtils.Exit(this);
}
return flag;
}
/**
* 退出程序
* @param cont
*/
public static void Exit(final Context cont)
{
AlertDialog.Builder builder = new AlertDialog.Builder(cont);
builder.setIcon(android.R.drawable.ic_dialog_info);
builder.setTitle("确定退出xxxxx吗?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//退出
AppManager.getAppManager().AppExit(cont);
}
});
builder.setNegativeButton("再逛逛", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
}
为了尊重原创者的创作,转载请注明地址 hao54216的博客