Activity 启动模式

来源:互联网 发布:高斯键盘知乎 编辑:程序博客网 时间:2024/04/30 10:24

    Android中的Activity的启动方式主要有:Standard,SingleTop,SingleTask,SingleInstance;

   Task: 与用户交互的一系列Activity组成的集合;一般而言,一个应用对应一个task;可以同时存在多个task,task可以从后台被调动到前台;当用户按下home键时,task会被转入后台,当再次启动application时,对应的task会被调到前台,并恢复和显示当前栈顶的activity等待与用户的交互。

   BackStack:与用户进行交互的Activity被组织在一个栈中,当前的Activity总是处于该栈的顶端。当用户按下back键时,当前activity会被销毁,并从当前的栈顶删除,此时栈中的另一个activity将被恢复并等待与用户的交互。过程是:先调用activityA的onPause方法,然后是activityB的恢复过程,最后才进行activityA的销毁工作。从一个activity跳转或者启动新的activity时,都会先调用当前activity的onPause方法。同一栈中的activity不会改变其初始的顺序,只能进行出栈或者压栈的操作。即,如果从当前栈顶的activity跳转到栈中的其他activity,则这之间栈中的activity都会被销毁。再次启动则需要重新建立。

  Standard:该模式是默认的启动模式。在该模式中,每次都会重新启动一个新的activity。

  SingleTop:若启动的activity位于当前栈的栈顶,则不会重新创建新的activity。否则创建新的activity。

  SingleTask:若设置为该模式,则一般会创建一个新的Task,并将目标activity作为该task的root activity。如果目标activity已经存在其他的task中,则会将对应的task调到前台,并显示该activity,但对应intent中的动作都会被丢弃而不执行。(如果是启动相同application中的activity则不需要创新新的task,否则创建新的task);

  SingleInstance:该模式基本与与singletask类似,只是该模式启用时,对应的task中只能存在一个activity,从该activity启动的其他任何activity都不会和原activity共享同一个task;即task中的root activity一直是该task的唯一activity。若activity设置为该模式,无论何时,都会创建一个新的task,并且将新的activity作为该task的root activity。


  可以在AndroidManifest.xml中使用“android:launchMode=”方式来设置activity的启动模式,也可以使用Intent的setflag方法来设置,后者可以覆盖前者,享受更高的优先级。


    http://developer.android.com/guide/components/tasks-and-back-stack.html