常常遇到这种情况:
tab分页中装了几个activity,每当它们创建时的activity生命周期调用情况就会让人感到混乱。这次做了个test好好弄清下这个调用过程,以及怎样设置返回键的调用事件。
mainactivity中用tab分页装四个intent意图(aActivity、bActivity,cActivity,dActivity).并且设置一开始显示的页是第一页即aActivity.则activity生命周期过程如下:
启动应用:
mainActivity onCreate(),
aActivity onCreate(),
mainActivity onCreate()
注意:此时如果不做任何操作则其他三个分页的onCreate()方法还没调用,只有当点击不同分页tab切换到那一页时,那一页的onCreate()方法才被调用。
也就是说此时只有第一个页面的activity被创建了,这种情况下,点击返回键结束应用会调用:
mainActivity finish()
,aActivity finish()
,aActivity destory(),
mainActivity destory();
另外一种情况:即启动应用后分别点击了其他几个分页的tab,切换到过那几个分页,那几个分页的on Create()方法都被调用了,
这时结束应用且当前tab页在aActivity页,则调用方法为:
mainActivity finish(),
aActivity finish(),
aActivity destory(),
bActivity destory(),
cActivity destory(),
dActivity destory(),
mainActivity destory();
如果结束应用且当前tab页在bActivity页,则调用方法为:
mainActivity finish(),
bActivity finish(),
aActivity destory(),
bActivity destory(),
cActivity destory(),
dActivity destory(),
mainActivity destory();
如果结束应用且当前tab页在cActivity页,则调用方法为:
类似上面的先调mainActivity finish(),cActivity finish()再依次调用四个destory();
注:每个tab分页onCreate()方法创建后,在切换tab页时不会再次被调用。
此外再说一下点击对按下返回按钮的监听顺序:
onbackPressed()方法不好用,例如此处要实现的效果是点击返回键,弹出提示退出对话框:则应在每个分页中写下下面的函数(注意是每个tab里,而不是mainActivity中):
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("------onKeyDown-----");
if (keyCode == KeyEvent.KEYCODE_BACK) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("你确定退出吗?")
.setCancelable(false)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
finish();
}
})
.setNegativeButton("返回",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
return super.onKeyDown(keyCode, event);
}