Activity启动模式

来源:互联网 发布:sql数据库管理 编辑:程序博客网 时间:2024/06/06 04:44
  • standard: 每次启动都会创建
  • singleTop:跟 Standard 类似,当Activity在栈顶时复用
  • singleTask:一个栈只保持一个实例,并且会在重新启动Activity时清掉栈顶其它Activity
  • singleInstance: 独占一个任务栈

singleTask与singleInstance可以保证一个主Activity,但这两模式存在一个问题:从主Activity跳到子Activity后,按home键回要主桌面,再从桌面应用图标启动应用,会发现重新回到了主Activity。
解决方法:
Intent intent =newIntent(mContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
 
    启动 Activity A的请求在intent中定义优先于在manifest中定义.

    singleTop  FLAG_ACTIVITY_SINGLE_TOP
    如果在栈顶就复用,否则就新建。
    如果一个activity的实例已经存在于当前任务的栈的顶端,系统通过调用它的onNewIntent()方法把intent路由到这个实例,而不是创建一个新的实例.activity可以被多次实例化,每个实例可以属于不同的任务,并且一个任务可以具有多个实例(但只是当位于后退栈的顶端的activity不存在时才会出现这种现像)
    "singleTask"  FLAG_ACTIVITY_CLEAR_TOP
             如果栈里有,就弹出它上面所有的Activity,让它显示出来
不同于Intent.FLAG_ACTIVITY_NEW_TASK;
             
        1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。  并且接下来启动的Activity都和它在同一个task.
        2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
     
     
    "singleInstance".
             独自占用一个栈
      跟"singleTask"一样.除了系统不能再启动其它activity到拥有这个activity实例的任务中.activity永远是任务的唯一;任何由这个activity启动的其它activity都在另一个任务中打开.
     
     
    如果android:process属性的值以":"开头,则表示这个进程是私有的;如果android:process属性的值以小写字母开头,则表示这是一个全局进程,允许其它应用程序组件也在这个进程中运行。必须保证这个属性  字符串内至少有一个"."字符
     
     
    广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。
原创粉丝点击