您的位置:首页 > 其它

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()来区分是以上哪种情形
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: