Android 完全退出应用程序的解决方法

时间:2022-01-11 07:46:51

有一种需要,我们在菜单项中点击退出应用程序,应用程序就退出,不需要回到mainactivity

设计:
Android 完全退出应用程序的解决方法

有两个应用界面mainactivity和bactivity,以及用于程序的通用类exitutil

步骤:

1、添加一个类,名为exitutil

复制代码 代码如下:

public class exitutil {
 public static final int exit_application = 0x0001;
 private context mcontext;
 public exitutil(context context) {
  mcontext = context;
 }
 // 完全退出应用程序
 public void exit() {
  intent intent = new intent(mcontext, mainactivity.class);
  // 设置flag!!!表示从当前activity跳转到intent构造方法中添加的类,并且把两个activity之间的activity给finish掉!
  intent.setflags(intent.flag_activity_clear_top);
  // 发出退出应用程序指示
  intent.putextra("flag", exit_application);
  mcontext.startactivity(intent);
 }
}


2、添加bactivity,覆写其中的方法如下,并且需要在清单文件中对此activity进行配置

复制代码 代码如下:

public class bactivity extends activity {
 private static final int menu_exitapplication = menu.first;
 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  textview tv = new textview(this);
  tv.settext("wecolme!");
  setcontentview(tv);
 }
 @override
 public boolean oncreateoptionsmenu(menu menu) {
  menu.add(0, menu_exitapplication, 0, "退出程序");
  return super.oncreateoptionsmenu(menu);
 }
 @override
 public boolean onoptionsitemselected(menuitem item) {
  // 其它activity调用程序就通过此方法
  if (item.getitemid() == menu_exitapplication) {
   exitutil eu = new exitutil(this);
   eu.exit();
  }
  return super.onoptionsitemselected(item);
 }
}


3、修改mainactivity方法

复制代码 代码如下:

public class mainactivity extends activity {
 button btn = null;
 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);
  btn = (button) findviewbyid(r.id.btn);
  btn.setonclicklistener(new onclicklistener() {// 点击进入bactivity
   @override
   public void onclick(view v) {
    intent intent = new intent(getapplicationcontext(), bactivity.class);
    startactivity(intent);
   }
  });
 }
 // 接受退出程序的指令
 @override
 protected void onstart() {
  int flag = getintent().getintextra("flag", 0);// 第一次,进入应用时获取得到的flag为默认的值0!
  if (flag == exitutil.exit_application) {
   finish();
  }
  log.i("tag", "start");
  super.onstart();
 }
 // 当activity是单例模式的时候,两次启动该activity就不会调用oncreate->onstart这些方法了
 @override
 protected void onnewintent(intent intent) {
  int flag = getintent().getintextra("flag", 0);
  if (flag == exitutil.exit_application) {
   finish();
  }
  log.i("tag", "newintent");
  super.onnewintent(intent);
 }
}