2013-05-24 小结 Intent的各Flag的用法

来源:互联网 发布:斗拱尺寸算法 编辑:程序博客网 时间:2024/05/21 10:35

1.FLAG_ACTIVITY_CLEAR_TOP

Intent it =new (A.this,B.class);

Intent it2 = new (B.this,C.class);

Intent it3 = new (C.this,A.class);

it3.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(it3);

这样运用该标志,C跳到A会直接关掉B去调用B的onDestroy()方法,C调用onPause()方法。

1)如果A的启动模式为standard模式则会调用A的onDestory()方法,然后重新创建A调用onCreate(),onStart(),onResume()方法,C则最后调用onStop() onDestroy()方法

2)如果A的启动模式为singleTop则不会重新创建A的实例,直接将BC关闭。

该标志也可以用于退出程序:

在退出时startActivity到启动页面,并将启动页面的启动模式设置为singleTop

if ((Intent.FLAG_ACTIVITY_CLEAR_TOP & intent.getFlags()) != 0) {                finish(); }



activity的启动模式:

singleTop的理解
当要转向的该activity不是栈顶activity实例则会新创建一个实例,此刻是与standard的模式是一样的。
如果是则不创建新实例而是调用onRestart()方法重启(什么时候是这样情况,当启动该Activity的时候将他上面的所有
activity都destroy掉的时候,则会发生的情况,也即启动该activity的时候加了一个Intent.FLAG_ACTIVITY_CLEAR_TOP
标志的时候)

singleInstance的理解
此启动模式不管是否在栈顶,程序中始终只有这一个实例,在跳转到该activity的时候
会调用onRestart()方法。将该实例放置到栈顶
该启动模式与标志Intent.FLAG_ACTIVITY_CLEAR_TOP一起使用,该标志失效,没有起作用。

singleTask的理解
设置该模式,没有任何标志,则会清除其之上的所有activity实例,并将原来的实例置于栈顶
加Intent.FLAG_ACTIVITY_CLEAR_TOP的标志,生命周期方法的运行也一样,也只有一个实例,只不过跟

singleInstance+Intent.FLAG_ACTIVITY_CLEAR_TOP一样的效果


原创粉丝点击