Activity次级页面和主页间来回跳转,防止重复创建Activity实例

来源:互联网 发布:表单验证 js 编辑:程序博客网 时间:2024/06/08 12:00

很多时候,在进入详情页或次级页面的时候,最后会返回到上一个Activity。在返回时,一般用Intent去启动。但是如果单纯地使用

Intent intent = new Intent(A.this, B.class) ;startActivity(intent) ;

你会发现,多次地从A进入B,又从B回到A,然后这两个Activity就会一直创建。打log发现两个Activity的onCreate方法一直调用,而栈里也一层一层地叠着这俩Activity的实例。当你按返回键准备返回时,发现并不能实现从次级页面返回到主页,然后退出应用这一流程,会把栈里所有创建的实例都出栈完了才会退出。

怎么实现无论点击多少次互相跳转,当页面在主页A的时候,点击返回时都会退出应用。即A Activity在栈中只有一个实例。

方法1:在Manifest里设置主页(A)的launchMode为singleTask,这样每次从次级页面返回时,会将主页A上面的Activity清空,让A重新回到栈顶。这样无论点击多少次AB跳转,都不会出现从主页返回到了次级页面。

方法2:在代码中由B启动A时,给Intent设置Flag。

Intent intent = new Intent(B.this, A.class) ;intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) ;startActivity(intent) ;

FLAG_ACTIVITY_CLEAR_TOP也会清空目标Activity(A)和它上面的所有Activity,并且重新创建A,所以在B跳转A时,打Log会发现,

A onDestroy()A onCreate()B onDestroy()

问题是解决了,但是A重新创建了一次,A毕竟是主页,是很多次级Activity返回的终点,不想A重新创建,怎么办?
可以给主页A设置launchMode为singleTask,这样A就不会重新创建了(A -> B ->A -> B -> A -> B ->A):

 A onCreate B onCreate B onDestroy B onCreate B onDestroy B onCreate B onDestroy

可以看到,无论AB之间互相跳转多少次,都不会重新创建A,只是身为次级页面的B会一直创建,当然,很多情况下,次级页面只会进入一次,比如新建××,修改××,这种次级页面会随着任务的完成而结束,销毁也是应该的。

1 0
原创粉丝点击