有一种需要,我们在菜单项中点击退出应用程序,应用程序就退出,不需要回到mainactivity
设计:
有两个应用界面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);
}
}