Android 代码设置启动模式

今天一个朋友问道了这个问题,从A activity启动一个B activity,B启动一个C,C启动一个D,A、B、C、D四个都是默认的启动模式。现象需要D直接回到A activity,但是不能重新创建一个新的Activity。怎么给D的Activity 设置一个Intent的参数能实现这个需求。

其实我们之前写过启动模式是SingleTop,或者SingleTask的就知道,当一个activity的时候,如果我们在从其他的一个activity重新启动已经启动了的这个activity,发现不会重新创建新的activity。也就是会重新设置显示。这里就是这样的一个需求。要是可以设置启动模式,应该我们设置一个A activity为SingleTask就可以实现。

 <activity
            android:launchMode="singleTask"
            android:name=".AActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

发现两次的activity是同一个。

今天这里需要用代码设置一个Intent,如果和上面一致应该也是设置一个SingleTask之类的FLAG.

但是我们没有在Intent中找到SINGLETASK的FALG,我们找到了一个FLAG_ACTIVITY_SINGLE_TOP,从注释看If set, the activity will not be launched if it is already running at the top of the history stack.应该和SingleTop差不多。从网上搜索一下,发现很多都是这么说的,这个就是和我们xml中设置SingleTask效果一样。我们可以试一试,设置上发现好像不合适。打开了新的activity.这是怎么回事。发现和这个一起的还有一个FLAG_ACTIVITY_CLEAR_TOP查看解释,If set, and the activity being launched is already running in the current task, then instead of launching a new instance of that activity。all of the other activities on top of it will be closed and this Intent will be delivered to the (now on top) old activity as a new Intent.
理解上说是如果存在一个Activity就不会创建新的,而是启动这个旧的,并且清除这个anctivity以上的所有。所以我们把这个FLAG也添加上去,测试一下。发现结果和设置SingleTask的一样。

结果:


而网上说的都是只设置FLAG_ACTIVITY_SINGLE_TOP,不知道是不是设置的问题。这里做一个记录,有问题方便纠正,其他有关Activity的启动模式的问题,可以查阅其他资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值