Application 生命周期
onCreate 在创建应用程序时创建
onTerminate 当终止应用程序对象时调用,不保证一定被调用,当程序是被内核终止以便为其他应用程序释放资源,那么将不会提醒,并且不调用应用程序的对象的onTerminate方法而直接终止进 程
onLowMemory 当后台程序已经终止资源还匮乏时会调用这个方法。好的应用程序一般会在这个方法里面释放一些不必要的资源来应付当后台程序已经终止,前台应用程序内存还不够时的情况。
onConfigurationChanged 配置改变时触发这个方法
Activity的生命周期
Activity的四种状态
- 运行状态Running:Activity位于栈顶,处于屏幕最前方
- 暂停状态Pause:Activity失去了焦点但仍然对用于可见
- 停止状态Stop:Activity对用户不可见
- 销毁状态Destroy:人为或系统原因(如低内存等)被销毁
onCreate时界面尚不可见,onStart后界面可见,onResume后界面接收事件
案例:
- Activity A 跳到 Activity B:A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop
- Activity B 点击返回键回到 Activity A:B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy
- 只有Activity A时点击返回键回到桌面:A:onPause -> A:onStop -> A:onDestroy
- 只有Activity A时点击Home键回到桌面:A:onPause -> A:onStop
- Activity A异常退出:A onPause == A onSaveInstance -> A onStop -> A onDestroy -> A onCreate -> onStart -> A onRestoreInstance -> A onResume
- Activity A 跳动小窗口Activity B(A部分被遮住):A:onPause -> B:onCreate -> B:onStart -> B:onResume
Fragment 生命周期
//系统在向 Activity 添加片段时调用的方法,附加之后才能够通过getActivity()获取Activity的上下文。
public void onAttach(Context context)
public void onCreate(Bundle savedInstanceState)
//返回Fragment的布局
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
// 在 Activity 的 onCreate() 方法已返回时调用。
public void onActivityCreated(@Nullable Bundle savedInstanceState)
//在Activity的onStart之后调用
public void onStart()
//在Activity的onResume之后调用
public void onResume()
//在Activity的onPause之前调用
public void onPause()
//在Activity的onStop之前调用
public void onStop()
// 在移除与片段关联的视图层次结构时调用。
public void onDestroyView()
// 在Activity的onDestroy之前调用
public void onDestroy()
// 在取消片段与 Activity 的关联时调用。
public void onDetach()
案例
1、replace,FragmentA替换为FragmentB,在创建完B以后会先销毁A,再创建B的视图
FragmentB: onAttach
FragmentB: onCreate
FragmentA: onPause
FragmentA: onStop
FragmentA: onDestroyView
FragmentA: onDestroy
FragmentA: onDetach
FragmentB: onCreateView
FragmentB: onActivityCreated
FragmentB: onStart
FragmentB: onResume
2、 add,添加FragmentA
FragmentA: onAttach
FragmentA: onCreate
FragmentA: onCreateView
FragmentA: onActivityCreated
FragmentA: onStart
FragmentA: onResume
3、remove,移除FragmentA
FragmentA: onPause
FragmentA: onStop
FragmentA: onDestroyView
FragmentA: onDestroy
FragmentA: onDetach
4、attach,从detach到attach状态
FragmentA: onCreateView
FragmentA: onActivityCreated
FragmentA: onStart
FragmentA: onResume
5、detach,从attach到detach状态
FragmentA: onPause
FragmentA: onStop
FragmentA: onDestroyView
6、hide和show不会触发生命周期回调
View 生命周期
Creation(创建)
Constructors(构造函数):有一种形式的构造函数会在View在代码中被创建时调用,另一种形式的构造函数会在View从layout加载出来时被调用。
第二种形式的构造函数会解析和应用layout文件中定义的任何属性。
onFinishInflate():该方法当View及其子View从XML文件中加载完成后会被调用。
Layout(布局)
onMeasure(int, int):该方法在计算当前View及其所有子View尺寸大小需求时会被调用。
onLayout(boolean, int, int, int, int):该方法在当前View需要为其子View分配尺寸和位置时会被调用。
onSizeChanged(int, int, int, int):该方法在当前View尺寸变化时被调用。
Drawing(绘制)
onDraw(android.graphics.Canvas):该方法在当前View需要呈现其内容时被调用。
Event processing(事件处理)
onKeyDown(int, KeyEvent):该方法在一个物理按键事件发生时被调用。
onKeyUp(int, KeyEvent):该方法在一个物理按键弹起事件发生时被调用。
onTrackballEvent(MotionEvent):该方法在一个轨迹球运动事件发生时被调用。
onTouchEvent(MotionEvent):该方法在一个触摸屏幕运动事件发生时被调用。
Focus(聚焦)
onFocusChanged(boolean, int, android.graphics.Rect):该方法在当前View获得或失去焦点时被调用。
onWindowFocusChanged(boolean):该方法在包含当前View的window获得或失去焦点时被调用。
Attaching(附上)
onAttachedToWindow():该方法在当前View被附到一个window上时被调用。
onDetachedFromWindow():该方法在当前View从一个window上分离时被调用。
onVisibilityChanged(View, int):该方法在当前View或其祖先的可见性改变时被调用。
onWindowVisibilityChanged(int):该方法在包含当前View的window可见性改变时被调用。
Service 生命周期
4个手动调用的方法
手动调用方法 作用
startService() 启动服务
stopService() 关闭服务
bindService() 绑定服务
unbindService() 解绑服务
5个自动调用的方法
内部自动调用的方法 作用
onCreat() 创建服务
onStartCommand() 开始服务
onDestroy() 销毁服务
onBind() 绑定服务
onUnbind() 解绑服务