关闭

Activity的生命周期

标签: Activity生命周期四大组件组件之一
108人阅读 评论(0) 收藏 举报
分类:

Activity的简介:

Activity作为四大组件之一, 也是最常见的一个组件,用于与用户进行交互,可以是一个,也可以是多个进行展示,通过setContentView来显示指定的控件,

Activity的生命周期有两种情况,一种是正常情况下的,另一种是非正常情况下的, 下面就分别介绍这两种情况.

1.正常情况下的声明周期是:

onCreate , onRestart , onStart , onResume , onPause , onStop , onDestroy 这七个方式.

这里写图片描述

onCreate : 表示Activity 正在被创建, 该方法只会被调用一次,通常来说在此方法里面可以做一些初始化的工作,通过setContentView 加载界面需要的布局资源,也可以做一些activity所需的数据等.

onRestart : 表示 正在重新启动, 当 当前的Activity 暂停的时候 , 从不可见重新变为可见的时候 onRestart会被调用

onStart : 表示正在被启动 , 当前的Activity已经加载完毕 可见了 但还没有展现在用户界面中

onResume : 表示已经可见了, 相比于onStart而言 已经展现在用户界面中了

onPause : 表示正在停止 , 如果用户在执行onPause 的时候返回到当前的 Activity的话, 那么此时的 onResume 就会被重新调用,通常情况下 只有onPause 执行完之后 才会执行 onResume

onStop : 表示即将停止

onDestroy : 表示正在停止或者即将被销毁 , 可以做一些回收和释放资源的操作 , 减少内存溢出的情况发生

在正常情况下的周期 又会细分为以下几种情况:

首先是 完整的生命周期,可视的生命周期,前台生命周期

entire lifetime
完整生命周期 onCreate–onStart–onResume–onPause–onStop–onDestroy
visible lifetime
可视生命周期 onStart—>onResume—onPause—-onDestroy
foreground lifetime
前台生命周期 onResume —> onPause

Activity 在切换过程中的生命周期:

  1. 第一次启动的时候, onCreate – onStart – onResume
  2. 当打开新的Activity或者切换到桌面的时 , onPause – onStop , 特殊情况下 , 如果新Activity 采用了透明主题,或者是对话框的样式 那么 当前Activity 不会 走onStop 方法
  3. 当再次回到原来的Activity的时候, onRestart – onStart – onResume
  4. 当点击back返回键的时候 onPause – onStop – onDestroy

举例:
两个Activity之间跳转时必然会执行的是哪几个方法。

一般情况比如说有两个activity,分别叫A,B ,当在A里面激活B组件的时候, A 会调用 onPause()方法,然后B 调用onCreate() ,onStart(), OnResume() ,

这个时候B覆盖了窗体, A会调用onStop()方法. 如果B呢 是个透明的,或者是对话框的样式, 就不会调用onStop()方法


上面介绍了正常情况下的生命周期
下面在介绍一下异常情况下的声明周期

当系统发生意外情况后 Activity 会被销毁 , 会调用 onPause , onStop , onDestroy

如果由于Ativity异常情况下而终止, 系统会调用onSaveInstanceState, 来保存当前的Activity的状态 ,正常情况下系统不会调用这个方法,
当Acivity 重新创建后 系统会调用 onRestoreInstanceState , 并且把Acivity销毁时onSaveInstanceState方法保存的Bundle 对象作为参数传递给onRestoreInstanceState 和 onCreate 方法, 所以可以通过这两个方法来判断 Activity 是否被重建了 , 如果被重建了 , 那么我们就可以取出之前保存的数据并恢复.

protected void onSaveInstanceState(Bundle bundle) { 
super.onSaveInstanceState(bundle); 
bundle .putLong(“id”, 12345678); 
} 
public void onCreate(Bundle savedInstanceState) { 
//判断 savedInstanceState是不是空. 
//如果不为空就取出来 
super.onCreate(savedInstanceState); 
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:78418次
    • 积分:2494
    • 等级:
    • 排名:第16591名
    • 原创:175篇
    • 转载:12篇
    • 译文:0篇
    • 评论:41条