Activity的启动模式

来源:互联网 发布:库里2016常规赛数据 编辑:程序博客网 时间:2024/06/06 18:38

Android采用Task来管理多个Activity,当启动一个应用时,Android就会创建一个Task,然后启动应用的入口Activity,先启动的Activity放在栈底,后启动的放在栈底。Activity的加载模式就负责管理实例化、加载Activity的方式,并可以控制Activity与Task间的加载关系。我们可以通过Activity类的getTaskId()获取该Activity所在的Task,

 

设置启动模式:

<activity

     android:name=".TwoActivity"

     android:label="@string/app_name"

     android:launchMode="standard">

 </activity>

四种模式

standard:标准模式,Activity的默认加载模式

singleTop:Task栈顶单例模式

singleTask:Task内单例模式

singleINstance:全局单例模式

 

standard模式:每次启动Activity时都会创建一个新的Activity实例,并将Activity添加到当前的Task栈中,不会启动一个新的任务栈。

singleTop:当将要启动的Activity已经在Task栈顶时,系统不会重新创建实例,而是直接服用已有的Activity,若将要启动的Activity没有在栈顶,则会重新创建Activity放到任务栈中。这种模式同样不会重新创建新的Task

singleTask:这种加载模式的Activity在同一个任务栈中只有一个实例,若将要启动的Activity不存在,则会创建activity实例,放到任务栈中,若在栈顶,则不会创建新的实例而是同singleTop相同,若将启动的activity实例存在而不在栈顶则会移除该activity上面的activity实例移除任务栈,从而使目标转入栈顶,这种模式同样不会重新创建新的Task。

singleInstance:该启动模式无论从那个Task启动Activity,都会创建一个新的Task,然后创建一个新的Activity,并将Activity放入任务栈中,所以该模式的activity所在的任务栈中只有一个activity若启动的目标activity不存在,则会创建一个新的任务栈,在创建一个新的activity,将activity放到新的任务栈中,activity已经存在,无论该activity在那个应用程序中,位于那个Task,系统都会把该activity所在的task转到前台,从而使该activity显示出来。该模式的activity设置exportedtrue,表明允许其他程序来启动该activity


onNewINtent()方法的使用

当启动模式是singleTask时,当Activity实例在任务栈中存在时,再次启动该activity时会先调用onNewIntent()—>onRestart()—>onStart()—>onResume(),若不存在则会调用onCreate()—>onStart()—> onResume()




0 0
原创粉丝点击