最近碰上个需求挺有意思的:
主菜单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"然后又再进入BIntent 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 staticBActivity getInstance() { return instance;}@Overrideprotected void onCreate(Bundle savedInstanceState) {instance = this;}然后在A中:
@Overridepublic void onBackPressed() { BActivity.getInstance().finish();super.onBackPressed();}
新闻热点
疑难解答