`

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

阅读更多
Android中Activity启动模式详解

  在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。

  Android总Activity的启动模式分为四种:

Activity启动模式设置:

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

Activity的四种启动模式:

    1. standard

        默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中,永远不会调用onNewIntent()。

    2. singleTop

        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,并调用其onNewIntent(),否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,而不会调用onNewIntent(),此时就跟standard模式一样)。

    3. singleTask

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

    4. singleInstance

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


       大家遇到一个应用的Activity供多种方式调用启动的情况,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的实现加上Manifest中对Activity设置lanuchMode=“singleTask”就可以。

       onNewIntent()非常好用,Activity第一启动的时候执行onCreate()---->onStart()---->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent(). 而后面如果再有想启动Activity的时候,那就是执行onNewIntent()---->onResart()------>onStart()----->onResume().  如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()---->onStart()---->onResume()等。

     当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。

Android任务和返回栈完全解析,细数那些你所不知道的细节
http://blog.csdn.net/guolin_blog/article/details/41087993
分享到:
评论

相关推荐

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

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

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

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

    android中的Activity启动方式

    Activity启动模式设置: &lt;activity android:name=".MainActivity"android:launchMode="standard" /&gt; 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的方式方法

    5.第四种方式的更优雅实现 6.双击返回键退出 方式一:利用ActivityContainer管理所有的Activity引用 该方式是建立一个通用的Activity的父类 BaseActivity以及一个ActivityContainer类,ActivityContainer是一个集

    360黑科技DroidPlugin.zip

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

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

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

Global site tag (gtag.js) - Google Analytics