子页面Activity缓存及销毁

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

主菜单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();
}

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值