Activity之生命周期
来源:互联网 发布:linux kangle一键安装 编辑:程序博客网 时间:2024/06/05 14:38
- 正常情况下的生命周期
A->B
AonPause-BonCreate-BonStart-BonResume(-AonStop这个是否执行取决于A是否被全部覆盖)
B->A
BonPause-AonStart-AonResume-BonStop-BonDestroy
当Activity切换时,需要先将栈顶Activity置为pause,再执行新Activity的方法(此时栈顶为新的Activity)。
所以如果有保存数据耗时操作的话,尽量在onStop中执行,是为了不妨碍新Activity的页面展现。而设置或者取数据等操作可以放在onResume中执行。 - 横竖屏切换时的生命周期
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}]
阅读全文
0 0
- Activity 生命周期之跳转 Activity
- Android 之 Activity 生命周期
- android之activity生命周期
- Android 之 Activity 生命周期
- Activity生命周期之我见
- Activity生命周期之我见
- Activity生命周期之我见
- Activity生命周期之我见
- Activity生命周期之我见
- Activity开发之生命周期
- Activity生命周期之我见
- Activity之生命周期
- Android之Activity生命周期
- Activity生命周期之我见
- Activity生命周期之我见
- Activity生命周期之我见
- Activity之生命周期
- Android生命周期之Activity
- Cornerstone详细操作(图解)
- Android Studio Gradle Build Running 加载很久问题。
- [Sencha Touch/ExtJS] Container/Panel/List等容器的滚动(到顶部)的方法
- Gradle
- js 实现文件上传
- Activity之生命周期
- Unity设置物体移动、缩放和旋转
- Android开发,Kotlin的了解与学习(八)-----kotlin与java的互相调用
- C#中图片与BASE64码互相转换
- Unity Android 权限
- 如何解决Oracle ASM故障导致的数据丢失问题
- R-FCN resnet50 训练自己的数据
- 大数据经典学习路线(及供参考)
- IntelliJ IDEA 高效率配置