面试之生命周期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/S43565442/article/details/72977233

面试被问到两个Activity跳转的生命周期,两个fragment有哪些跳转方式,以及各自的生命周期。虽然生命周期大家都已经记得比较清楚了,但是来回各种跳转返回的生命周期,相信不少小伙伴也都会一脸懵逼,为此特意写了些代码验证:

  • activity,fragment的生命周期
  • activity之间跳转生命周期
  • fragment有哪些跳转方式
  • fragment之间跳转生命周期

activity,fragment的生命周期

activity生命周期一共七个:
onCreate:activity被创建   (创建view,静态数据创建,等)
onStart:activity可见
onResume:activity获得焦点,可以操作
onPause:失去焦点    将要执行另一个activity的时候执行(保存数据,停止动画,关闭流等)
onPause后正常跟onStop,但是如果有对话框或者activity是透明的话后面会是onResume
onStop:activity不可见
onDestory:被销毁

activity有三种生命周期:
完整生命周期:onCreate到onDestory
可见的生命状态:onStart到onStop
前台生命状态:onResume到onPause

activity一共有三种状态:
Resumed:在前台有焦点
Paused:另一个activity跑到前台并获得焦点
Stopped:activity完全被另一个activity遮盖

fragment生命周期一共11个:
onAttach(Activity):当Fragment和activity关联起来的时候
onCreate(Bundle) :初始化Fragment的工作
onCreateView(LayoutInflater, ViewGroup, Bundle) :创建并返回Fragment的布局(穿衣)
onActivityCreated(Bundle) :当activity的onCreate方法已经执行完毕后会执行该方法,告诉Fragment activity已经执行完毕
onViewStateRestored(Bundle) tells the fragment that all of the saved state of its view hierarchy has been restored.
onStart() :Fragment可以被用户可见
onResume() :Fragment获得焦点,可以和用户交互
onPause() :失去焦点,不能和用户交互(activity要Pause或者修改了Fragment的操作)
onStop() :不能被用户可见(activity要Stop或者修改了Fragment的操作)
onDestroyView() :清除于Fragment相关联的布局资源
onDestroy() :清除Fragment的一些状态,如释放内存等
onDetach() :将Fragment从activity中解除挂载

fragment一共有三种运行状态:
运行态:Resumed   
停止态:Stopped 

fragment生命周期一共分为六部分:
Created(onAttach,onCreate,onCreateView,onActivityCreated)
Started,Resumed,Paused,Stopped
Destroyed(onDestroyView,onDestroy,onDetach)

activity之间跳转生命周期

08-29 12:17:20.370: I/firstActivity–>(15197): onCreate
08-29 12:17:20.370: I/firstActivity–>(15197): onStart
08-29 12:17:20.380: I/firstActivity–>(15197): onResume
按返回键:
08-29 12:19:18.370: I/firstActivity–>(15197): onPause
08-29 12:19:18.990: I/firstActivity–>(15197): onStop
08-29 12:19:18.990: I/firstActivity–>(15197): onDestroy
按home键:
08-29 12:23:22.100: I/firstActivity–>(15197): onPause
08-29 12:23:22.640: I/firstActivity–>(15197): onStop
再按程序:
08-29 12:23:25.340: I/firstActivity–>(15197): onRestart
08-29 12:23:25.340: I/firstActivity–>(15197): onStart
08-29 12:23:25.340: I/firstActivity–>(15197): onResume

两个activity之间来回跳转,执行顺序:
08-29 14:57:28.640: E/MainActivity—>(23975): MainActivity中 onCreate
08-29 14:57:28.640: E/MainActivity—>(23975): MainActivity中 onStart
08-29 14:57:28.640: E/MainActivity—>(23975): MainActivity中 onResume
08-29 14:57:31.060: E/MainActivity—>(23975): MainActivity中 onPause ——-交出焦点
08-29 14:57:31.120: I/MainActivity—>(23975): firstActivity中 onCreate
08-29 14:57:31.120: I/MainActivity—>(23975): firstActivity中 onStart
08-29 14:57:31.120: I/MainActivity—>(23975): firstActivity中 onResume ——–获得焦点,然后mainactivity接着暂停
08-29 14:57:31.530: E/MainActivity—>(23975): MainActivity中 onStop
08-29 14:57:33.920: I/MainActivity—>(23975): firstActivity中 onPause ——-按返回键,firstactivity交出焦点
08-29 14:57:33.930: E/MainActivity—>(23975): MainActivity中 onRestart
08-29 14:57:33.930: E/MainActivity—>(23975): MainActivity中 onStart
08-29 14:57:33.930: E/MainActivity—>(23975): MainActivity中 onResume ——–mainactivity获得焦点
08-29 14:57:34.310: I/MainActivity—>(23975): firstActivity中 onStop
08-29 14:57:34.310: I/MainActivity—>(23975): firstActivity中 onDestroy
08-29 15:01:22.310: E/MainActivity—>(23975): MainActivity中 onPause
08-29 15:01:22.920: E/MainActivity—>(23975): MainActivity中 onStop
08-29 15:01:22.920: E/MainActivity—>(23975): MainActivity中 onDestroy

fragment有哪些跳转方式

[Android]Fragment的四种跳转
http://www.jianshu.com/p/ab1cb7ddf91f

fragment之间跳转生命周期

09-10 02:52:42.328: I/MainActivity(816): Left—–>onAttach —-Fragment开始
09-10 02:52:42.328: I/MainActivity(816): Left—–>onCreate
09-10 02:52:42.338: I/MainActivity(816): Left—–>onCreateView —-Fragment穿衣
09-10 02:52:42.358: E/MainActivity(816): MainActivity—–>onCreate —-main创建
09-10 02:52:42.358: I/MainActivity(816): Left—–>onActivityCreated —-main创建完后通知Fragment
09-10 02:52:42.358: E/MainActivity(816): MainActivity—–>onStart —-main start
09-10 02:52:42.358: I/MainActivity(816): Left—–>onStart —-Fragment start
09-10 02:52:42.358: E/MainActivity(816): MainActivity—–>onResume —-main resume
09-10 02:52:42.368: I/MainActivity(816): Left—–>onResume —-Fragment resume
按返回键
09-10 03:02:05.609: I/MainActivity(863): Left—–>onPause —-Fragment先暂停
09-10 03:02:05.609: E/MainActivity(863): MainActivity—–>onPause —-main暂停
09-10 03:02:06.399: I/MainActivity(863): Left—–>onStop —-Fragment停止
09-10 03:02:06.399: E/MainActivity(863): MainActivity—–>onStop —-main停止
09-10 03:02:06.409: I/MainActivity(863): Left—–>onDestroyView —–Fragment脱衣服
09-10 03:02:06.409: I/MainActivity(863): Left—–>onDestroy —-Fragment销毁
09-10 03:02:06.409: I/MainActivity(863): Left—–>onDetach —-Fragment和Activity失去联系
09-10 03:02:06.409: E/MainActivity(863): MainActivity—–>onDestroy —-main销毁
重新打开:
09-10 03:05:24.099: I/MainActivity(863): Left—–>onAttach —-重新打开过称和创建基本一样
09-10 03:05:24.099: I/MainActivity(863): Left—–>onCreate
09-10 03:05:24.109: I/MainActivity(863): Left—–>onCreateView
09-10 03:05:24.149: E/MainActivity(863): MainActivity—–>onCreate
09-10 03:05:24.149: I/MainActivity(863): Left—–>onActivityCreated
09-10 03:05:24.149: E/MainActivity(863): MainActivity—–>onStart
09-10 03:05:24.149: I/MainActivity(863): Left—–>onStart
09-10 03:05:24.159: E/MainActivity(863): MainActivity—–>onResume
09-10 03:05:24.159: I/MainActivity(863): Left—–>onResume

有两个Fragment:
09-10 02:56:29.309: I/MainActivity(863): Left—–>onAttach
09-10 02:56:29.318: I/MainActivity(863): Left—–>onCreate
09-10 02:56:29.318: I/MainActivity(863): Left—–>onCreateView
09-10 02:56:29.328: I/MainActivity(863): Right—–>onAttach
09-10 02:56:29.328: I/MainActivity(863): Right—–>onCreate
09-10 02:56:29.338: I/MainActivity(863): Right—–>onCreateView
09-10 02:56:29.348: E/MainActivity(863): MainActivity—–>onCreate
09-10 02:56:29.348: I/MainActivity(863): Left—–>onActivityCreated
09-10 02:56:29.348: I/MainActivity(863): Right—–>onActivityCreated
09-10 02:56:29.348: E/MainActivity(863): MainActivity—–>onStart
09-10 02:56:29.348: I/MainActivity(863): Left—–>onStart
09-10 02:56:29.358: I/MainActivity(863): Right—–>onStart
09-10 02:56:29.358: E/MainActivity(863): MainActivity—–>onResume
09-10 02:56:29.358: I/MainActivity(863): Left—–>onResume
09-10 02:56:29.358: I/MainActivity(863): Right—–>onResume
返回键:
09-10 03:02:05.609: I/MainActivity(863): Left—–>onPause
09-10 03:02:05.609: I/MainActivity(863): Right—–>onPause
09-10 03:02:05.609: E/MainActivity(863): MainActivity—–>onPause
09-10 03:02:06.399: I/MainActivity(863): Left—–>onStop
09-10 03:02:06.399: I/MainActivity(863): Right—–>onStop
09-10 03:02:06.399: E/MainActivity(863): MainActivity—–>onStop
09-10 03:02:06.409: I/MainActivity(863): Left—–>onDestroyView
09-10 03:02:06.409: I/MainActivity(863): Left—–>onDestroy
09-10 03:02:06.409: I/MainActivity(863): Left—–>onDetach
09-10 03:02:06.409: I/MainActivity(863): Right—–>onDestroyView
09-10 03:02:06.409: I/MainActivity(863): Right—–>onDestroy
09-10 03:02:06.409: I/MainActivity(863): Right—–>onDetach
09-10 03:02:06.409: E/MainActivity(863): MainActivity—–>onDestroy
重新打开:
09-10 03:05:24.099: I/MainActivity(863): Left—–>onAttach
09-10 03:05:24.099: I/MainActivity(863): Left—–>onCreate
09-10 03:05:24.109: I/MainActivity(863): Left—–>onCreateView
09-10 03:05:24.119: I/MainActivity(863): Right—–>onAttach
09-10 03:05:24.119: I/MainActivity(863): Right—–>onCreate
09-10 03:05:24.119: I/MainActivity(863): Right—–>onCreateView
09-10 03:05:24.149: E/MainActivity(863): MainActivity—–>onCreate
09-10 03:05:24.149: I/MainActivity(863): Left—–>onActivityCreated
09-10 03:05:24.149: I/MainActivity(863): Right—–>onActivityCreated
09-10 03:05:24.149: E/MainActivity(863): MainActivity—–>onStart
09-10 03:05:24.149: I/MainActivity(863): Left—–>onStart
09-10 03:05:24.159: I/MainActivity(863): Right—–>onStart
09-10 03:05:24.159: E/MainActivity(863): MainActivity—–>onResume
09-10 03:05:24.159: I/MainActivity(863): Left—–>onResume
09-10 03:05:24.159: I/MainActivity(863): Right—–>onResume

猜你喜欢

转载自blog.csdn.net/S43565442/article/details/72977233