Android开发笔记|Activity次级页面和主页间来回跳转,防止重复创建Activity实例

很多时候,在进入详情页或次级页面的时候,最后会返回到上一个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

【Android开发笔记|Activity次级页面和主页间来回跳转,防止重复创建Activity实例】可以看到,无论AB之间互相跳转多少次,都不会重新创建A,只是身为次级页面的B会一直创建,当然,很多情况下,次级页面只会进入一次,比如新建××,修改××,这种次级页面会随着任务的完成而结束,销毁也是应该的。

    推荐阅读