雖然如今都用Fragment了,但做爲Android新手,我遇到一個須要Activity之間切換而不銷燬以前的Activity的問題。ide
Activity A->B->C 而後返回, C->B->A 。 再A->B->C動畫
這時,我不想C和B被銷燬,我不在意堆棧結構,但不能讓C和B從新onCreate(),而只是調用onNewIntent()。this
搜索了不少,最後仍是在外網找到方法。C->B和B->A時不用finish(),而是從新new Intent,並且調用startActivity()前,component
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
根據Google本身的解釋:Intent.FLAG_ACTIVITY_REORDER_TO_FRONTxml
* <p>For example, consider a task consisting of four activities: A, B, C, D. * If D calls startActivity() with an Intent that resolves to the component * of activity B, then B will be brought to the front of the history stack, * with this resulting order: A, C, D, B.
另外注意get
AndroidManifest.xml裏的Activity的launchMode必定都去掉。it
這時A,B,C已經沒有什麼堆棧關係了,不管前進,後退,都是startActivity()。io
這時動畫會有點問題,push,pop都是從push那種動畫,從右邊進入,左邊退出。class
這時須要用到自定義動畫,不過返回的自定義動畫會發現無效,解決方法是overridePendingTransition寫到onNewIntent裏面:搜索
好比B的出現動畫包括A->B和C->B,能夠根據"from"來判斷
protected void onNewIntent(Intent intent) { super.onNewIntent(intent); String from = intent.getStringExtra("from"); if (from != null && from.equals("result")) { overridePendingTransition(R.anim.in_from_left, R.anim.out_to_right); } else { overridePendingTransition(R.anim.in_from_rigt, R.anim.out_to_left); }