活动界面重复返回

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

----------------------------------------------------------------------------------------------------------------

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

截图如下:

      

                             “D”                                                              “E”

原因:点击按钮“D”后,活动“E”被重复创建了两个实例。

解决方法:

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

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

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

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

缺点:如果该活动并没有处于栈顶位置,还是可能会创建多个活动实例

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

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

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

<activity android:name=".Activity.EActivity"
          android:launchMode="singleTask"/>

 

posted on 2017-05-07 15:44  gis老张  阅读(306)  评论(0编辑  收藏  举报