View的生命周期方法和Activity生命周期方法关系
2015-05-13 13:26
211 查看
View 是在Activity 中使用到的,所以在自定义View的时候,我们需要了解Activity 生命周期方法和View的生命周期方法调用先后顺序。
见如下图
(1) 在Activity onCreate方法中初始化了View , 调用了View 的onFinishInflate
(2) 在执行完 Activity的 onPostResume方法之后(第一次onResume之后)才真正开始了View的绘制工作: onAttachedToWindow --> onMeasure -->
onSizeChanged --> onLayout --> onDraw
当按住锁屏键的时候,Activity和View生命周期发生变化:
Activity onPause之后 调用了 View的 onSaveInstanceState方法
当重新回到页面的时候,Activity和View的生命周变化:
View的生命周期方法没有被调用
当点击回退的时候,Activity和View的生命周期发生变化:
Activity onPause -> onStop -> onDestroy
onDestroy之后 调用了 View的onDetachedFromWindow方法
View 的生命周期为
[改变可见性] --> 构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw -->
onDetackedFromWindow
总的可以归结三点:
(1) 在Activity onCreate方法中初始化了View 的时候, 调用了View 的onFinishInflate
(2) 在执行完 Activity的 onResume 方法之后,才真正开始了View的绘制工作:onMeasure --> onSizeChanged --> onLayout --> onDraw
(3) onMeasure,onSizeChanged,onLayout,onDraw可能由于setVisible或onresume调用多次,而onAttachedToWindow与onDetachedFromWindow在创建与销毁view的过程中只会调用一次
Activity 生命周期方法 onCreate, onStart, onResume, onPause, onStop, onDestroy 被调用先后顺序,如下图:
Activity 生命周期方法,每个方法这里简单说一下:(这里我翻译了4.2.2 Activity 源码方法的注释)
onCreate
activity开始的时候执行的方法,可以做如下初始化工作:
(1)调用setContentView(int) 初始化UI
(2)调用findViewById(int) 初始化UI中的组件
(3)调用managedQuery(android.net.Uri , String[], String, String[], String)} 获取数据库数据显示
在onCreate方法中也可以调用finish()方法,此时会立刻触发onDestroy()方法,跳过了onStart,onResume,onPause等方法的执行。
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onStart
在onCreate之后被调用, 或 activity停止之后调用onRestart方法之后被调用,
此方法之后就是onResume方法
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onResume (此方法在onRestart,onRestoreInstanceState或onPause之后被调用),activity开始和用户交互
牢记:onResume不是最好的说明activity对用户是可见的,因为可能锁屏可能在前面
可以通过onWindowFocusChanged方法来确定activity是否对用户可见
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onPause
Activity进入后台且Activity进程还没被kill的时候被调用,
当Activity B 启动在Activity A前面的时候,此时Activity A的onPause方法会被调用,
直到Activity A的onPause方法返回结果的时候,Activity B的onCreate方法才会调用,
因此不要在onPause方法进行耗时任务。
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onStop
当Activity对用户不再可见的时候被调用, onStop之后可能会调用onRestart或onDestroy或者什么不发生,取决于用户操作.
内存不够的时候调用了onPause之后,onStop不会被调用的。
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onDestroy
执行最后的清除工作在activity被销毁之前,此方法被调用可以出现以下情况:
(1)activity正在finish(调用了finish()方法)
(2)系统为了保留空间暂时销毁此Activity
可以通过调用isFinishing()来区分是以上哪种情形
见如下图
(1) 在Activity onCreate方法中初始化了View , 调用了View 的onFinishInflate
(2) 在执行完 Activity的 onPostResume方法之后(第一次onResume之后)才真正开始了View的绘制工作: onAttachedToWindow --> onMeasure -->
onSizeChanged --> onLayout --> onDraw
当按住锁屏键的时候,Activity和View生命周期发生变化:
Activity onPause之后 调用了 View的 onSaveInstanceState方法
当重新回到页面的时候,Activity和View的生命周变化:
View的生命周期方法没有被调用
当点击回退的时候,Activity和View的生命周期发生变化:
Activity onPause -> onStop -> onDestroy
onDestroy之后 调用了 View的onDetachedFromWindow方法
View 的生命周期为
[改变可见性] --> 构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw -->
onDetackedFromWindow
总的可以归结三点:
(1) 在Activity onCreate方法中初始化了View 的时候, 调用了View 的onFinishInflate
(2) 在执行完 Activity的 onResume 方法之后,才真正开始了View的绘制工作:onMeasure --> onSizeChanged --> onLayout --> onDraw
(3) onMeasure,onSizeChanged,onLayout,onDraw可能由于setVisible或onresume调用多次,而onAttachedToWindow与onDetachedFromWindow在创建与销毁view的过程中只会调用一次
Activity 生命周期方法 onCreate, onStart, onResume, onPause, onStop, onDestroy 被调用先后顺序,如下图:
Activity 生命周期方法,每个方法这里简单说一下:(这里我翻译了4.2.2 Activity 源码方法的注释)
onCreate
activity开始的时候执行的方法,可以做如下初始化工作:
(1)调用setContentView(int) 初始化UI
(2)调用findViewById(int) 初始化UI中的组件
(3)调用managedQuery(android.net.Uri , String[], String, String[], String)} 获取数据库数据显示
在onCreate方法中也可以调用finish()方法,此时会立刻触发onDestroy()方法,跳过了onStart,onResume,onPause等方法的执行。
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onStart
在onCreate之后被调用, 或 activity停止之后调用onRestart方法之后被调用,
此方法之后就是onResume方法
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onResume (此方法在onRestart,onRestoreInstanceState或onPause之后被调用),activity开始和用户交互
牢记:onResume不是最好的说明activity对用户是可见的,因为可能锁屏可能在前面
可以通过onWindowFocusChanged方法来确定activity是否对用户可见
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onPause
Activity进入后台且Activity进程还没被kill的时候被调用,
当Activity B 启动在Activity A前面的时候,此时Activity A的onPause方法会被调用,
直到Activity A的onPause方法返回结果的时候,Activity B的onCreate方法才会调用,
因此不要在onPause方法进行耗时任务。
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onStop
当Activity对用户不再可见的时候被调用, onStop之后可能会调用onRestart或onDestroy或者什么不发生,取决于用户操作.
内存不够的时候调用了onPause之后,onStop不会被调用的。
Activity子类覆盖此方法的时候必须调用父类方法,否则会出现异常。
onDestroy
执行最后的清除工作在activity被销毁之前,此方法被调用可以出现以下情况:
(1)activity正在finish(调用了finish()方法)
(2)系统为了保留空间暂时销毁此Activity
可以通过调用isFinishing()来区分是以上哪种情形
相关文章推荐
- View的生命周期方法和Activity生命周期方法关系
- Android如何给无法更改继承关系的Activity更换ActionBar(setContentView方法实战)
- Activity/ViewGroup/View生命周期方法
- Activity、Window、View的关系
- iOS开发UI篇—0408控制器View的生命周期方法
- PhoneWindow,ViewRoot,Activity之间的大致关系
- View 生命周期方法
- loadView ViewDidLoad ViewDidUnLoad 个方法的关系
- 一张图帮你分析activity与fragment的生命周期及其他们的关系
- 面试问题 activity生命周期,当设备旋转时android生命周期方法的调用顺序
- Android截屏截图方法汇总(Activity、View、ScrollView、ListView、RecycleView、WebView截屏截图)
- Activity处于后台Handler进行UI操作View组件的isShow()方法慎用
- service汇总(service模拟后台下载、service刷新UI、service与Activity生命周期关系、service和活动间的通信)
- android开发 Activity的里面调用两次 setContentView方法
- 回顾一下Activity的生命周期和启动模式的关系
- Android 中Activity,Window和View之间的关系
- setContentView(R.layout.activity_main) Error解决方法
- Android 中Activity,Window和View之间的关系
- android 中activity,window,view的关系
- Android 中Activity、Window和View之间的关系