Activity之間切換而不銷燬以前的Activity

雖然如今都用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);
    }
相關文章
相關標籤/搜索