区分Activity的四种launchMode加载模式

转至 http://marshal.easymorse.com/archives/2950 Activity有四种加载模式 standard(默认模式) singleTop singleTask singleInstance 设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:         <activity android:name="ActB" android:launchMode="singleTask"></activity> standard:         每次都建立了该Activity的新实例。standard的加载模式就是这样的,intent将发送给新的实例 singleTop         singleTop和standard模式,都会将intent发送新的实例。不过,singleTop要求若是建立intent的时候栈顶已经有要建立的Activity的实例,则将intent发送给该实例,而不发送给新的实例。 当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法  singleTask         singleTask模式和后面的singleInstance模式都是只建立一个实例的。当intent到来,须要建立singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实 例。若是有直接将intent发送给它。 当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法  singleTask若是为启动页,在任意页点击home,返回桌面后点击应用会销毁上层Activity, 若是第二次打开singleTask,在singleTask上层的activity都会销毁 若是A应用中的singleTask已打开,B应用打开singleTask会调用onNewIntent并销毁上层Activity,点击返回会返回singleTask的下层activity,当下层activity所有销毁后才会 返回B应用 singleTask若是只在本应用中使用那么,TaskId固定。 singleInstance         这个模式下的Activity单独在一个task栈中。这个栈只有一个Activity。 singleInstance没次启动都会在一个新的Task中,与默认的应用的TaskId不一样 第二次打开singleInstance,会启动onNewIntent而且将本activity移动到最上 若是A=>B(singleInstance)=>C A执行了finish()后A、C的TaskId不一样 若是singleInstance已打开,另外一个应用打开singleInstance会调用onNewIntent,点击返回会销毁activity,当前应用中也会找不到activity。 此时Task栈1的状况仍是为:A B C。Task栈2的状况为:D。此时屏幕界面显示D的内容,若是这时D又经过Intent跳转到D,则Task栈2中也不会新建一个D的实例,因此 两个栈的状况也不会变化。而若是D跳转到C,则栈1的状况变成了:A B C C,由于C的Launch mode为standard,此时若是再按返回键,则栈1变成:A B C。也就是说现 在界面还显示C的内容,不是D。
相关文章
相关标签/搜索