活动界面重复返回

将最近在开发中遇到的问题记录下来,以避免重复再犯!android

----------------------------------------------------------------------------------------------------------------spa

问题:在碎片界面点击按钮“D”进入另外一活动E(Activity)后,再按回退键返回到碎片界面,按了回退键发现又重复进入活动E(Activity),即须要两次才能回退到碎片界面。code

截图以下:xml

      

                             “D”                                                              “E”blog

缘由:点击按钮“D”后,活动“E”被重复建立了两个实例。开发

解决方法:it

一、原理:在给出具体解决方法以前,先预习下“活动启动模式”这个知识点,在实际项目中咱们应该根据具体的需求来为每一个活动指定恰当的启动模式。启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,能够在AndroidManifest.xml中经过<activity>标签指定android:launchMode属性来选择启动模式。class

· standard模式(即默认状况下),每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统不会在意这个活动是否已经在返回栈中存在,每次启动都会建立该活动的一个新的实例。原理

缺点:活动已经在栈顶,再次启动的时候还要建立一个新的活动实例程序

· singleTop模式用来解决重复建立栈顶活动问题。在启动活动时若是发现返回栈的栈顶已是该活动,则认为直接使用它,不会再从新建立新的活动实例。

缺点:若是该活动并无处于栈顶位置,仍是可能会建立多个活动实例

· singleTask模式让某个活动在整个应用程序的上下文中只存在一个实例。当活动指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,若是发现已经存在则直接使用该实例,并把在这个活动之上的全部活动通通出栈,若是没有发现就会建立一个新的活动实例。

· singleInstance模式启用一个新的返回栈来管理这个活动

二、具体方法:在AndroidManifest.xml中“E”活动下添加android:launchMode="singleTask"便可,具体以下:

<activity android:name=".Activity.EActivity"
          android:launchMode="singleTask"/>
相关文章
相关标签/搜索