四种Activity的启动方式

android四种启动Activity的方式:

1、standard

2、SingleTop

3、SingleTask

4、SingleInstance

设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置Android:launchMode属性,例如:

        <activity
            android:name=".MainActivity"
            android:launchMode="standard" />

四种启动模式的区别

  • standard
     任务栈:启动的第一个实例,放在栈中,启动的第二个实例,放在栈中,依次类推,点后退键,弹出栈的实例,呈现上一个Activity的实例,实现后退的导航,允许多个Activity叠加。

    

  • SingleTop

     如果在任务的栈顶正好存在该Activity的实例,就重用该实例,否者就会创建新的实例(调用onNewIntent()方法)并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

   可以解决这样的Bug:
   消息推送,通知栏弹出Notification,点击Notification跳转到指定的Activity,但是如果现在页面就停留在那个指定的Activity,会再次打开我当前的Activity,这样返回的时候回退的页面和当前页面一样,感觉上就会很奇怪。登录的时候,登录成功跳转到主页,按下两次登录按钮,生成了两个主页。一些有启动延迟的页面(往往是动画,网络造成)也会有这样的情况。

 

  • SingleTask
    如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中

       做浏览器、微博之类的应用,比如其他APP需要打开我们的浏览器页面,就可以配置它为singleTask模式,保证它只有一个唯一的实例,节约内存同时按下返回键后的感觉也更顺畅。但是需要注意,提供给人调用的页面最好是栈底元素。因为如果自己的客户端处于运行状态,按下Home键后台挂起。此时如果使用其他应用(比如说QQ)调起自己的客户端某个页面,不做任何处理的情况下,按下回退或者当前Activity.finish(),页面都会停留在自己的客户端(因为自己的Application回退栈不为空),这明显不符合逻辑

  • SingleInstance(单一实例模式)

    在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦模式的Activity的实例存在于某个栈中,任何应用再激活Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

应用场景:呼叫来电界面

1、以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个这样的实例。

2、以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activity时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。

3、以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他开启的任何activity都会运行在其他任务中。 







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值