Android编程中Activity的四种启动模式

 更新时间:2016年04月12日 10:43:13   作者:肚皮会唱歌  
这篇文章主要介绍了Android编程中Activity的四种启动模式,较为详细的分析了Activity四种启动模式的原理与功能,需要的朋友可以参考下

本文实例讲述了Android编程中Activity的四种启动模式。分享给大家供大家参考,具体如下:

Activity启动方式有四种,分别是:

standard
singleTop
singleTask
singleInstance

可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题。

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

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

下面是这四种模式的作用:

standard

默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

例如:

若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……

点back键会依照栈顺序依次退出。

singleTop

可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

例如:

若我有两个Activity名为B1,B2,两个Activity内容功能完全相同,都有两个按钮可以跳到B1或者B2,唯一不同的是B1为standard,B2为singleTop。
若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)
若我意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。

singleTask

只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

例如:

若我的应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,无论我在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,但是C2只会存在一个,并且这三个Activity都在同一个task里面。

但是C1->C2->C3->C2->C3->C1-C2,这样的操作过程实际应该是如下这样的,因为singleTask会把task中在其之上的其它Activity destory掉。

操作:C1->C2          C1->C2->C3          C1->C2->C3->C2            C1->C2->C3->C2->C3->C1             C1->C2->C3->C2->C3->C1-C2
实际:C1->C2          C1->C2->C3          C1->C2                              C1->C2->C3->C1                               C1->C2

若是别的应用程序打开C2,则会新启一个task。

如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskIdI不会为200,例如C2的taskId为201,那么再从C2打开C1、C3,则C2、C3的taskId仍为201。

注意:如果此时你点击home,然后再打开Other,发现这时显示的肯定会是Other应用中的内容,而不会是我们应用中的C1 C2 C3中的其中一个。

singleInstance

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

例如:

程序有三个ActivityD1,D2,D3,三个Activity可互相启动,其中D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。

若是在别的应用程序打开D2,假设Other的taskId为200,打开D2,D2会新建一个task运行,假设它的taskId为201,那么如果这时再从D2启动D1或者D3,则又会再创建一个task,因此,若操作步骤为other->D2->D1,这过程就涉及到了3个task了。

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android通信方式总结》、《Android调试技巧与常见问题解决方法汇总》、《Android开发入门与进阶教程》、《Android基本组件用法总结》、《Android布局layout技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android studio有关侧滑的实现代码

    Android studio有关侧滑的实现代码

    这篇文章主要介绍了Android studio有关侧滑的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Flutter路由之fluro的配置及跳转

    Flutter路由之fluro的配置及跳转

    本文主要介绍了Flutter路由之fluro的配置及跳转,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 详解Flutter中listview的高级用法

    详解Flutter中listview的高级用法

    一般我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通常情况下这样做是够用了,但是不排除我们会有一些其他的特殊需求。今天我们会来讲解一下ListView的一些高级用法,希望对大家有所帮助
    2023-01-01
  • 获取Android设备电池电量状态

    获取Android设备电池电量状态

    本文介绍了在Android系统中获取设备电池电量状态的方法,包括使用BatteryManager类获取电量百分比、电池状态和健康状况,以及通过注册广播接收器实时获取电量状态变化。了解这些方法可以帮助用户更好地管理设备的使用,避免因电量不足而影响使用体验。
    2023-03-03
  • 详解Android性能优化之启动优化

    详解Android性能优化之启动优化

    一款应用的第一印象很重要,第一印象往往决定了用户的去留。打开一款应用,如果速度很快,很顺畅,那么很容易让人觉得这款应用背后的技术实力很强,用户潜意识中会对这款应用更加的信赖。本文将详细介绍Android性能优化之启动优化。
    2021-06-06
  • Android中GridView插件的使用方法

    Android中GridView插件的使用方法

    今天小编就为大家分享一篇关于Android中GridView插件的使用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android 利用ImageView属性实现选中和未选中效果

    Android 利用ImageView属性实现选中和未选中效果

    这篇文章主要介绍了Android巧用ImageView属性实现选中和未选中效果,实现思路通常我们会选择在布局里加个ImageView,然后通过代码层面加个判断去让ImageView加载不同状态的图片,需要的朋友可以参考下
    2023-06-06
  • Android gradle打包并自动上传的方法

    Android gradle打包并自动上传的方法

    本篇文章主要介绍了Android gradle打包并自动上传的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Android仿百度外卖自定义下拉刷新效果

    Android仿百度外卖自定义下拉刷新效果

    大家在使用百度外卖的订餐的时候,会看到有个下拉刷新功能非常不错,今天小编就通过代码给大家介绍android仿百度外卖自定义下拉刷新,感兴趣的朋友一起学习吧
    2016-04-04
  • Android数据库greenDAO配置与使用介绍

    Android数据库greenDAO配置与使用介绍

    这篇文章主要介绍了Android集成GreenDao数据库,使用数据库存储时候,一般都会使用一些第三方ORM框架,比如GreenDao,本文分几步给大家介绍Android集成GreenDao数据库的方法,需要的朋友可以参考下
    2023-03-03

最新评论