首页 > 学院 > 开发设计 > 正文

子页面Activity缓存及销毁

2019-11-09 15:13:49
字体:
来源:转载
供稿:网友

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

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

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

@Overridepublic 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;}
@Overrideprotected void onCreate(Bundle savedInstanceState) {
instance = this;}

然后在A中:

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表