`

Activity的启动模式和onNewIntent

阅读更多
一、启动模式介绍

启动模式简单地说就是Activity启动时的策略,在 Android Manifest.xml中的标签的android:launchMode属性设置;

启动模式有4种,分别为standard、singleTop、singleTask、singleInstance。

Activity的任务栈,任务栈是一种“先进后出”的栈结构,这个比较好理解,就是我们每按一次back键就会有一个Activity出栈,知

道这个任务栈空为止,当任务栈为空时候系统就回收这个任务栈。

二、四大启动模式的理解

1.standard:标准模式,这也是系统默认的启动模式。每启动一个Activity都会被重新创建一个新的实例,不管这个实例是否已经存在。谁启动这个Activity,那么这个Activity就运行在启动他那个Activity点任务栈中,但当我们用Application去启动一个standard模式的Activity的就会报错,因为非Activity类型的Content没有所谓的任务栈,这时候我们要为就要启动的Activity指定一个标志位FLAG_ACTIVITY_NEW_TASK,这样启动的时候就为这个Activity再创建一个任务栈,这其实就是SingleTask的启动方式。

2.singleTop:栈顶复用模式。在这种模式下,如果新的Activity已经位于任务栈的栈顶,这时候再启动该Activity,该Activity就不会被创建,即该Activity的Oncreate、onStart方法不会被调用,同时他的OnNewIntent方法会被调用,通过此方法的参数可以取出当前请求的信息。如果这个Activity不在栈顶,这个Activty的实例将会被创建。

3.singleTask:栈内复用模式。是一种单实例模式,在这种情况下只要一个Activity在一个栈内存在,那么多次启动Activity都不会重新创建实例,和SingleTop一样的,他也会执行OnNewIntent的方法,就是说当一个singleTask的Activity启动了以后,系统会寻找是否有该Activity想要的任务栈,如果有的话,看Activity是否在任务栈内实例化过,如果没有就重新创建一个Activity的任务栈。

4.singleInstance:单实例模式。就是说是一种加强的singleTask,他除了有所有的singleTask的任务外,还有就是此种启动模式的Activity只能单独的位于一个任务栈内。

任务栈由前台任务栈和后台任务栈,当后台任务栈中有Activity需要被启动时候,整个后台任务栈将会当前台的任务栈中。singleTask所需的任务栈,默认情况下Activity所需的任务栈都是该应用的包名,当然我们也可以给每个Activity单独通过TaskAffinity的属性指定任务栈,通过TaskAffinity指定的任务栈不能是该应用的包名。通过给Intent设置标志位和在注册文件内都可以指定Activity的启动模式,这两种的标志位的优先级高。

三、Activity的Falgs标志位

Activity有很多Flags,我们主要说常用的,
FLAG_ACTIVITY_NEW_TASK,这个标志位的作用是为Activity指定“singleTask”启动模式,和在XMl指定效果一样;
FLAG_ACTIVIYT_SINGLE_TOP,这个标志位的作用是为Activity指定“singleTop”启动模式;
FLAG_ACTIVITY_CLEAR_TOP,这个和FLAG_ACTIVITY_NEW_TASK连用,是指同一任务栈内位于该Activity上面的所有Activity都要出栈;
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,具有此标志的Activity将不会出现在用户通过历史列表此Activity。
分享到:
评论

相关推荐

    activity的四种启动模式和onNewIntent的关系

    activity的四种启动模式和onNewIntent的关系

    Android中Activity的四种启动模式和onNewIntent()

    android 中activity的启动模式分为四种,(standard、singleTop、singTask、singleInstance),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧

    android中的Activity启动方式

    Activity启动模式设置: <activity android:name=".MainActivity"android:launchMode="standard" /> Activity的四种启动模式: 1.standard 模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。 ...

    如何正确理解和使用Activity的4种启动模式

    关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用。 Activity的启动模式有4种,分别是standard...

    Android onNewIntent()触发机制及注意事项

    在IntentActivity中重写下列方法:onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent 1、其他应用发Intent,执行下列方法: onCreate onStart onResume 发Intent的方法: Uri uri = ...

    详解Activity之singletast启动模式及如何使用intent传值

    Activity的四种启动模式:  1. standard  模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。  2. singleTop  如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的...

    android 退出app 退出应用程序

    2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,...

    Android 退出多Activity的application的方式方法

    在开发过程中,我们常常需要一个退出功能,来退出该应用的所有Activity。下面,我们列举一些退出应用的几种方式。 1.利用ActivityContainer来管理所有的Activity的引用 2.使用广播通知BaseActivity结束 3.直接杀...

    360黑科技DroidPlugin.zip

    启动插件:启动插件的Activity、Service等都和你启动一个以及安装在系统中的app一样,使用系统提供的相关API即可。组件间通讯也是如此。实现原理:请参见源码支持:任何问题可以在项目中提交bug报告,也可以发送邮件...

    小米推送的那些坑 :有的手机能收到推送,有的收不到,通知栏只能显示一个。。。。。

    前提:产品投放于国外市场,投放于Google Paly,开发在国内。运营只需要在小米控制台进行小米推送,不需要服务器配合。 遇到问题: ①(一开始对接问题) 一直不展示通知消息 ② 在通知栏只展示一条通知信息 ...

Global site tag (gtag.js) - Google Analytics