Activity生命周期
onCreate()
活动第一次调用时调用,完成活动初始化操作,加载布局,绑定事件等
setContentView(R.layout.activity_main);//加载布局
Button b1 = (Button) findViewById(R.id.button);
b1.setOnClickListener(this);
onStart()
活动由不可见->可见时调用
onResume()
活动准备好和用户交互时调用
活动处于返回栈顶,且处于运行状态
onPause()
系统准备启动或恢复另一个活动时调用
常处理:将一些消耗CPU的资源释放掉、保存一些关键数据
该方法执行速度要快,不然影响新栈顶活动使用
onStop()
活动完全不可见时调用
和onPause()区别,活动出一dialog,活动还可见,只调用onPause(),不调onStop()
onDestory()
活动在销毁前调,之后活动变为销毁状态
常处理:释放内存
onRestart()
活动由停止变成运行前调用
onStop() -> onStart()
完整生存期 | onCreate()-onDestory() | |
可见生存期 | onStart()-onStop() | 活动对用户总可见,可能与用户无法交互,可通过onStart与onStop,合理管理对用户可见的资源。如在onStart对资源加载,在onStop对资源释放,保证处于停止状态活动不会占过多内存 |
前台生存期 | onResume()-onPause() | 活动总处于运行状态,此时活动可与用户交互,最常接触的状态 |
Fragment生命周期
onAttach() 活动与碎片关联
onCreate()
onCreateView() 为碎片创建视图(加载布局)时调用
onActivityCreated() 确保与碎片相关联活动一定创建完时调用
onStart()
onResume()
onPause()
onStop()
onDestoryView() 与碎片关联视图被移除时 ?? 关联视图? 碎片布局被移除时
onDestory()
onDetach() 碎片与活动解除关联
注:三个函数中有Bundle,碎片进入停止状态后,由于内存不足被回收。
复写onSavedInstanceState(Bundle savedInstanceState)保存数据
可在以下三个方法中再次得到数据
public void onCreate(Bundle savedInstanceState)
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
public void onActivityCreated(Bundle savedInstanceState)
Demo:
public class RightFragment extends Fragment {
private static final String TAG = "`RightFragment`";
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
String s1 = "savedInstanceState";
savedInstanceState.putString("TAG1", s1);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
if (savedInstanceState != null) {
String s2 = savedInstanceState.getString("TAG1");
Log.d(TAG, "onCreate: s2 "+s2);//输出savedInstanceState
}
}
...
onSavedInstanceState()调用时机:
- 如果是用户自动按下返回键,或程序调用finish()退出程序,是不会触发onSaveInstanceState()和onRestoreInstanceState()的。
- 每次用户旋转屏幕时,您的Activity将被破坏并重新创建。当屏幕改变方向时,系统会破坏并重新创建前台Activity,因为屏幕配置已更改,您的Activity可能需要加载替代资源(例如布局)。即会执行onSaveInstanceState()和onRestoreInstanceState()的。
- 可能还有其它的…