Activity之生命周期

来源:互联网 发布:linux kangle一键安装 编辑:程序博客网 时间:2024/06/05 14:38
  1. 正常情况下的生命周期
    A->B
    AonPause-BonCreate-BonStart-BonResume(-AonStop这个是否执行取决于A是否被全部覆盖)
    B->A
    BonPause-AonStart-AonResume-BonStop-BonDestroy
    当Activity切换时,需要先将栈顶Activity置为pause,再执行新Activity的方法(此时栈顶为新的Activity)。
    所以如果有保存数据耗时操作的话,尽量在onStop中执行,是为了不妨碍新Activity的页面展现。而设置或者取数据等操作可以放在onResume中执行。
  2. 横竖屏切换时的生命周期
    2.1 不设置configChange
    切至横屏:
onPause            onSaveInstanceState[Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@d414664, 2131427397=android.view.AbsSavedState$1@d414664, 2131427398=android.view.AbsSavedState$1@d414664, 2131427399=android.support.v7.widget.Toolbar$SavedState@9efe2af, 2131427400=android.view.AbsSavedState$1@d414664, 2131427417=android.view.AbsSavedState$1@d414664, 2131427418=TextView.SavedState{48f06bc start=0 end=0 text=}}, android:focusedViewId=2131427418}]}]]            onStop            onDestroy            onCreate:saveInstanceState[Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@d414664, 2131427397=android.view.AbsSavedState$1@d414664, 2131427398=android.view.AbsSavedState$1@d414664, 2131427399=android.support.v7.widget.Toolbar$SavedState@9efe2af, 2131427400=android.view.AbsSavedState$1@d414664, 2131427417=android.view.AbsSavedState$1@d414664, 2131427418=TextView.SavedState{48f06bc start=0 end=0 text=}}, android:focusedViewId=2131427418}]}]]            onStart            onRestoreInstanceState[Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@d414664, 2131427397=android.view.AbsSavedState$1@d414664, 2131427398=android.view.AbsSavedState$1@d414664, 2131427399=android.support.v7.widget.Toolbar$SavedState@9efe2af, 2131427400=android.view.AbsSavedState$1@d414664, 2131427417=android.view.AbsSavedState$1@d414664, 2131427418=TextView.SavedState{48f06bc start=0 end=0 text=}}, android:focusedViewId=2131427418}]}]]            onResume

切至竖屏:

onPause            onSaveInstanceState[Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@d414664, 2131427397=android.view.AbsSavedState$1@d414664, 2131427398=android.view.AbsSavedState$1@d414664, 2131427399=android.support.v7.widget.Toolbar$SavedState@e6fed31, 2131427400=android.view.AbsSavedState$1@d414664, 2131427417=android.view.AbsSavedState$1@d414664, 2131427418=TextView.SavedState{4d31c16 start=0 end=0 text=}}, android:focusedViewId=2131427418}]}]]            onStop            onDestroy            onCreate:saveInstanceState[Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@d414664, 2131427397=android.view.AbsSavedState$1@d414664, 2131427398=android.view.AbsSavedState$1@d414664, 2131427399=android.support.v7.widget.Toolbar$SavedState@e6fed31, 2131427400=android.view.AbsSavedState$1@d414664, 2131427417=android.view.AbsSavedState$1@d414664, 2131427418=TextView.SavedState{4d31c16 start=0 end=0 text=}}, android:focusedViewId=2131427418}]}]]            onStart            onRestoreInstanceState[Bundle[{android:viewHierarchyState=Bundle[{android:views={16908290=android.view.AbsSavedState$1@d414664, 2131427397=android.view.AbsSavedState$1@d414664, 2131427398=android.view.AbsSavedState$1@d414664, 2131427399=android.support.v7.widget.Toolbar$SavedState@e6fed31, 2131427400=android.view.AbsSavedState$1@d414664, 2131427417=android.view.AbsSavedState$1@d414664, 2131427418=TextView.SavedState{4d31c16 start=0 end=0 text=}}, android:focusedViewId=2131427418}]}]]            onResume

保存数据:

Activity.java:            final void performSaveInstanceState(Bundle outState) {                onSaveInstanceState(outState);  // 保存页面信息                saveManagedDialogs(outState);  // 保存Dialog信息                mActivityTransitionState.saveState(outState);  // 保存页面跳转信息                storeHasCurrentPermissionRequest(outState);            }            protected void onSaveInstanceState(Bundle outState) {                outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState());  // 保存Window信息                Parcelable p = mFragments.saveAllState();                if (p != null) {                    outState.putParcelable(FRAGMENTS_TAG, p);  // 保存Fragment信息                }                getApplication().dispatchActivitySaveInstanceState(this, outState);            }        PhoneWindow.java:            public Bundle saveHierarchyState() {                Bundle outState = new Bundle();                if (mContentParent == null) {                    return outState;                }                SparseArray<Parcelable> states = new SparseArray<Parcelable>();                mContentParent.saveHierarchyState(states);  // 保存页面View信息                outState.putSparseParcelableArray(VIEWS_TAG, states);                // Save the focused view ID.                final View focusedView = mContentParent.findFocus();                if (focusedView != null && focusedView.getId() != View.NO_ID) {                    outState.putInt(FOCUSED_ID_TAG, focusedView.getId());                }                // save the panels                SparseArray<Parcelable> panelStates = new SparseArray<Parcelable>();                savePanelState(panelStates);                if (panelStates.size() > 0) {                    outState.putSparseParcelableArray(PANELS_TAG, panelStates);                }                if (mDecorContentParent != null) {                    SparseArray<Parcelable> actionBarStates = new SparseArray<Parcelable>();                    mDecorContentParent.saveToolbarHierarchyState(actionBarStates);                    outState.putSparseParcelableArray(ACTION_BAR_TAG, actionBarStates);                }                return outState;            }        View.java:            public void saveHierarchyState(SparseArray<Parcelable> container) {                dispatchSaveInstanceState(container);            }            protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {                if (mID != NO_ID && (mViewFlags & SAVE_DISABLED_MASK) == 0) {  // 设置了id且没有disableSave                    mPrivateFlags &= ~PFLAG_SAVE_STATE_CALLED;                    Parcelable state = onSaveInstanceState();                    if ((mPrivateFlags & PFLAG_SAVE_STATE_CALLED) == 0) {                        throw new IllegalStateException(                                "Derived class did not call super.onSaveInstanceState()");                    }                    if (state != null) {                        // Log.i("View", "Freezing #" + Integer.toHexString(mID)                        // + ": " + state);                        container.put(mID, state);                    }                }            }            protected Parcelable onSaveInstanceState() {                mPrivateFlags |= PFLAG_SAVE_STATE_CALLED;                if (mStartActivityRequestWho != null) {                    BaseSavedState state = new BaseSavedState(AbsSavedState.EMPTY_STATE);                    state.mStartActivityRequestWhoSaved = mStartActivityRequestWho; // 保存mStartActivityRequestWho                    return state;                }                return BaseSavedState.EMPTY_STATE;            }        ViewGroup.java:            protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {                super.dispatchSaveInstanceState(container);                final int count = mChildrenCount;                final View[] children = mChildren;                for (int i = 0; i < count; i++) {                    View c = children[i];                    if ((c.mViewFlags & PARENT_SAVE_DISABLED_MASK) != PARENT_SAVE_DISABLED) {                        c.dispatchSaveInstanceState(container);  // 下发到每一个子View自己的dispatchSaveInstanceState处理                    }                }            }

2.2 设置configChanges=”orientation|screenSize”
切至横屏:onConfigurationChanged[{1.0 ?mcc?mnc zh_CN ldltr sw360dp w598dp h336dp 480dpi nrml land finger -keyb/v/h -nav/h suim:1 s.16}]
切至竖屏:onConfigurationChanged[{1.0 ?mcc?mnc zh_CN ldltr sw360dp w360dp h580dp 480dpi nrml port finger -keyb/v/h -nav/h suim:1 s.17}]

原创粉丝点击