其实对于Activity、Fragment的生命周期很多文章都有,但是都是在分别讲它们的声明周期,却没有结合起来看声明周期方法。比如Activity的onCreate调用了后,附加上的Fragment的onCreate、onActivityCreated等方法什么时候执行呢,貌似还是不是很清楚。于是就动手打印下日志看下就一目了然了。 1、正常的生命周期方法调用 02-08 11:26:06.982 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onCreate— 02-08 11:26:07.008 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onAttach 02-08 11:26:07.008 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onAttachFragment— 02-08 11:26:07.008 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onCreate 02-08 11:26:07.008 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onCreateView 02-08 11:26:07.009 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onViewCreated 02-08 11:26:07.009 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onActivityCreated 02-08 11:26:07.010 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onStart 02-08 11:26:07.010 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onStart— 02-08 11:26:07.010 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onResume— 02-08 11:26:07.010 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onResume 02-08 11:26:07.011 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onPostResume— 02-08 11:26:17.550 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onPause 02-08 11:26:17.550 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onPause— 02-08 11:26:18.085 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onStop 02-08 11:26:18.085 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onStop— 02-08 11:26:18.086 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onDestroyView 02-08 11:26:18.086 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onDestroy 02-08 11:26:18.086 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onDetach 02-08 11:26:18.087 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onDestroy—
2、切换到其它界面的生命周期方法 02-08 11:32:24.268 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onCreate— 02-08 11:32:24.283 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onAttach 02-08 11:32:24.283 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onAttachFragment— 02-08 11:32:24.283 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onCreate 02-08 11:32:24.283 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onCreateView 02-08 11:32:24.285 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onViewCreated 02-08 11:32:24.285 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onActivityCreated 02-08 11:32:24.285 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onStart 02-08 11:32:24.285 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onStart— 02-08 11:32:24.285 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onResume— 02-08 11:32:24.286 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onResume 02-08 11:32:24.286 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onPostResume— 02-08 11:32:26.801 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onPause 02-08 11:32:26.801 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onPause— 02-08 11:32:27.248 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onStop 02-08 11:32:27.248 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onStop— 区别在这里,Activity回来的时候之星onRestart方法了 02-08 11:32:33.794 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onRestart— 02-08 11:32:33.795 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onStart 02-08 11:32:33.795 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onStart— 02-08 11:32:33.795 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onResume— 02-08 11:32:33.795 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onResume 02-08 11:32:33.795 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onPostResume— 02-08 11:33:01.046 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onPause 02-08 11:33:01.046 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onPause— 02-08 11:33:01.539 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onStop 02-08 11:33:01.540 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onStop— 02-08 11:33:01.540 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onDestroyView 02-08 11:33:01.541 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onDestroy 02-08 11:33:01.541 18083-18083/com.xanthium.constraintlayoutsample E/MainFragment: onDetach 02-08 11:33:01.541 18083-18083/com.xanthium.constraintlayoutsample E/MainActivity: —onDestroy—
不过需要注意的是,如果使用不同手机的最近列表直接移除应用的时候,你会发现Activity、Fragment的onDestroyView、onDestroy、onDetach等方法是不执行的,感觉这样做的就感觉一个完整的生命周期没有被执行啊,不过想想也许系统绝对既然都杀死了就没必要去执行吧。当然这个也看手机系统吧。像我的乐视手机就是不执行。
另外,以前总以为Fragment的getContext和getActivity是在onActivityCreated 方法执行之后才有值的,今天才知道其实在onCreate的时候就有了。
新闻热点
疑难解答