Android启动页的问题整理

在一个Activity中,多次调用startActivity()来启动另一个Activity,要想只生成一个Activity实例,方法有两种。

方法一:设置起动模式
一个Activity有四种启动模式:standard, singleTop, singleTask, singleInstance。
standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。
singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。
singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。
singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。

这些启动模式可以在功能清单文件中进行设置,中的launchMode属性。

方法二:在intent中加标志
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。
代码如下:

Java代码
Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

=======================我是华丽的分割线=======================

问题:

操作步骤如下:
1、将启动页的android:launchMode设置成singleTask后,从启动页打开一个activity。
2、按home键,将手机屏幕切到主界面。
3、再点击启动页对应的程序图标。
4、程序会显示启动页,而没有显示它打开的activity。

安装文档中描述的launchMode设置成singleTask后,程序只会创建唯一一个启动页,并且所有由启动页打开的activity都会在这个Task中。这正是我想要的效果。

但是,从程序从前台切到后台,再切回前台后,为什么它没有显示activity堆栈最顶端的activity呢,而是显示了root页面,也就是启动页呢?

有没有办法可以让launchMode设置成singleTask后,仍然像设置成standard一样,在从后台切换回程序时,显示启动页打开的activity(栈顶的activity)啊?

回复1:

“singleTask” activity allows other activities to be part of its task. It’s always at the root of its task, but other activities (necessarily “standard” and “singleTop” activities) can be launched into that task.
这是文档中的说明,那么既然是只有一个启动页,你从程序从前台切到后台,再切回前台后,相当于还是要启动程序吧?
既然你要启动程序是不是要启动这个唯一的启动页呢?
所以就到了楼主所说的结果。
第二,其实感觉也挺简单的,直接将android:launchMode=”singleInstance”这样就应该可以了。
测试过,能达到楼主要求。

回复2:

1、“那么既然是只有一个启动页,你从程序从前台切到后台,再切回前台后,相当于还是要启动程序吧”。那为什么设置为“standard”的时候,能够显示栈顶的activity呢?
设置为standard的时候,允许有多个启动项, 也就是说, 可以从任意一个activity中启动,具体的请看文档。

2、设置成android:launchMode=”singleInstance”后,这样操作:由启动页打开一个activity,然后按回退键。被打开的activity不见了,但是启动页也不见了,直接显示手机的主界面,应该显示启动页才合理啊。
on the other hand, permits no other activities to be part of its task. It’s the only activity in the task. If it starts another activity, that activity is assigned to a different task — as if FLAG_ACTIVITY_NEW_TASK was in the intent.
文档中是这样说的,你设置成了singleInstance,. It’s the only activity in the task。
也说了解决的办法,就是你开启acitivty跳转的时候,添加flag FLAG_ACTIVITY_NEW_TASK 即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值