鍍金池/ 問(wèn)答/Android/ singletask 被clear的Activities 不會(huì)走finish流程

singletask 被clear的Activities 不會(huì)走finish流程

`public void finish() {
  super.finish();
    overridePendingTransition(0, R.anim.alpha_fade_out);
}`

經(jīng)過(guò)測(cè)試:
singletask模式下, 被cleartop的Activities 不會(huì)走finish流程,物理返回鍵會(huì)走finish流程。這關(guān)系到pop時(shí)動(dòng)畫(huà)是否會(huì)被執(zhí)行。
所以請(qǐng)問(wèn)在singletask 的activity之上的Activities ,要怎么加pop時(shí)的動(dòng)畫(huà)?

回答
編輯回答
賤人曾

傻了,我先試試onDestory。啊 in vain。

稍微看了下源碼:
正常流程:
MyActivity.finish()
Activity.finish()
ActivityManagerNative.getDefault().finishActivity()
ActivityManagerService.finishActivity()
ActivityStack.requestFinishActivityLocked()
ActivityStack.finishActivityLocked()
ActivityStack.startPausingLocked()

異常流程(singletask):

else if ((launchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0
                            || launchSingleInstance || launchSingleTask) {
                        // In this situation we want to remove all activities
                        // from the task up to the one being started.  In most
                        // cases this means we are resetting the task to its
                        // initial state.
                        ActivityRecord top =
                                intentActivity.task.performClearTaskLocked(r, launchFlags);

ActivityRecord里:

 final void performClearTaskAtIndexLocked(int activityNdx) {
        int numActivities = mActivities.size();
        for ( ; activityNdx < numActivities; ++activityNdx) {
            final ActivityRecord r = mActivities.get(activityNdx);
            if (r.finishing) {
                continue;
            }
            if (stack == null) {
                // Task was restored from persistent storage.
                r.takeFromHistory();
                mActivities.remove(activityNdx);
                --activityNdx;
                --numActivities;
            } else if (stack.finishActivityLocked(//走這里
                    r, Activity.RESULT_CANCELED, null, "clear-task-index", false)) {
                --activityNdx;
                --numActivities;
            }
        }
    }

直接從
ActivityStack.finishActivityLocked()
開(kāi)始往下走,自然不會(huì)經(jīng)過(guò)finish方法,onDestory里設(shè)置pop anim也是無(wú)用的。
這幾個(gè)方法都是final類(lèi)型,不能做什么手腳。
所以在finish() -》 onDestory()流程中,有什么方法是可以開(kāi)放給開(kāi)發(fā)者操作的?

2017年5月24日 23:33