分享

activity的启动模式

 风雪夜归人_95 2014-05-23

今天在解决一个app提示音错乱的问题。当时的逻辑时,只有在mainactivity里才不会出现notification图标。而进入对话框,也会出现notification,则这种显示不合理。后来在测试的过程中,发现了一种情况:某个app在后台运行,当notification出现后,不点击notification进入该app,而是直接进入那个app,结果会出现两个activity,就会导致一些潜在问题。比如:退出的时候要退出两次等。后来知道这需要设置activity的启动模式。

以下来自网络:

launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例。

Activity一共有以下四种launchMode:

1.standard

2.singleTop

3.singleTask

4.singleInstance

我们可以在AndroidManifest.xml配置<activity>的android:launchMode属性为以上四种之一。

1.standard

standard模式是默认的启动模式,不管有没有已存在的实例,都生成新的实例

2.singleTop

跳转时系统会先在栈结构中寻找是否有一个对应的实例正位于栈顶,如果有则不再生成新的,而是直接使用。

3.singleTask

如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。

4.singleInstance

这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。

 而当不从notification处回到那个activity,应该在onResume()函数中检查那个notification是否存在,若在,则让他消失(notificationmanager.cancel(id))。

当点击应用程序的图标时,会首先启动应用程序的主activity,即在AndroidManifest.xml中被            <action android:name="android.intent.action.MAIN" /> 标记的activity。

如果在一个包含fragment的activity和该fragment中都定义onactivityresult()函数,无论是使用哪种启动模式,其执行顺序都是先执行fragment中的onactivityresult()函数,再执行activity中的onactivityresult()函数。实验证明,只有使用了singleInstance启动的activity在执行startactivity之后会立即执行onactivityresult()函数;而其他三种启动模式启动的activity执行startactivity函数后,等再次回到这个activity才会执行onactivityresult()函数。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多