**一、(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):
可以看到,无论AB之间互相跳转多少次,都不会重新创建A,只是身为次级页面的B会一直创建,当然,很多情况下,次级页面只会进入一次,比如新建××,修改××,这种次级页面会随着任务的完成而结束,销毁也是应该的。
原文链接:https://blog.youkuaiyun.com/black_dreamer/article/details/52015210
二、小程序销毁页面的方法
阐述:
在使用页面跳转的时候,往往是需要销毁上一个页面的,那么就需要用到生命周期函数onUnload了。
一、具体使用方法如下:
1.1,注意以下几点:
要想触发销毁页面onUnload生命周期执行方法,必须要使用不存在页面栈的路由。比如:wx.reLaunch、wx.redirectTo、wx.navigateBack
不能使用wx.navigateTo,因为此路由是可以保存页面栈的,也就是并没有销毁页面,而是叠加页面栈,最多可以叠加5层。
1.2,小程序销毁页面之前调用的方法
wx.redirectTo({
url:’/pages/address/address’
})
onUnload:function(){
let pages = getCurrentPages().length - 1;
console.log(‘需要销毁的页面:’+pages);
wx.navigateBack({
delta: pages
})
}
原文链接:https://blog.youkuaiyun.com/zxh7770/article/details/106932873/