子页面Activity缓存及销毁

本文介绍了一种在Android应用中实现特定单例模式的方法,确保Activity状态保存的同时,实现从主菜单Activity到子页面Activity之间的正确跳转及返回流程。通过调整Activity的启动模式和使用静态实例管理,实现了APP流畅的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近碰上个需求挺有意思的:

主菜单Activity是A,子页面Activity是B,要求,A点击进入B,B返回后不能结束,从A再次进入B要上次的状态,从A点返回,整个APP退出。

1、首先对B的返回进行处理:

@Override
public void onBackPressed() {
    //  super.onBackPressed();
    Qiuutil.LogE("onBackPressed");
    Intent intent = new Intent(this, AActivity.class);
    startActivity(intent);
}

必须重写此方法,并注释Supper。否则默认调用会FINISH(),就无法缓存。

但是这里又是重新打开A,所以A必须是单例模式,

2、A单例模式

android:name=".activity.AActivity"
android:launchMode="singleInstance"
然后又再进入B

  Intent intent = new Intent(this, BActivity.class);
    startActivity(intent);
这时要求进入的是已经缓存的B,所以B也得使用单例模式,

3、B单例模式

android:name=".activity.BActivity"
android:launchMode="singleTask
"

这里并没有使用“singleInstance”模式而使用“singleTask”。(华为手机测试)

到这里就完成了需求。

4、探讨B单例模式

如果B使用“singleInstance”模式,那么在A使用返回退出时,B界面会一直存活,无法退出整个APP。具体原因不懂,请有了解的朋友留言。

如果是小米手机B必须使用“singleInstance”模式;

如果是华为手机B必须使用“singleTask”模式;

好蛋疼,求高手指点。

5、为了更加保险,在B中为B设置单例模式如下:

private static BActivity instance;

public static 
BActivity getInstance() {
return instance;}
@Override
protected void onCreate(Bundle savedInstanceState) {
instance = this;
}

然后在A中:

@Override
public void onBackPressed() {
 BActivity.getInstance().finish();
    super.onBackPressed();
}

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值