最近碰上個需求挺有意思的:
主菜單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();}
新聞熱點
疑難解答