您当前的位置: 首页 >  android

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android -- 四大组件】Activity 知识点

Kevin-Dev 发布时间:2017-01-11 15:10:03 ,浏览量:0

一、前言 定义

属于 Android 四大组件之一:ActivityServiceBroadcastReceiverContentProvider

作用

显示界面 & 与用户进行交互。

  • 一个 Activity 通常是一个界面,是四大组件唯一能被用户感知的;
  • 每个活动被实现为一个独立的类, & 从活动基类继承过来;
  • Activity 之间通过 Intent 进行通信。
二、Activity 的生命周期

生命周期:onCreate() -> onStart() - > onResume() -> onPause() -> onStop() -> onDestroy() 生命周期

  • 启动 Activity:系统先调用 onCreate(),然后调用 onStart(),最后调用 onResume()方法,Activity 进入运行状态。

  • Activity 被其他 Activity 覆盖其上(DialogActivity)或者锁屏:系统会调用 onPause() 方法,暂停当前 Activity 的执行。

  • 当前 Activity 由被覆盖状态回到前台或者解锁屏:系统会调用 onResume() 方法,再次进入运行状态。

  • 当前 Activity 转到新的 Activity 界面或按 Home 键回到主屏,自身退居后台:系统会先调用onPause() 方法,然后调用 onStop() 方法,进入停滞状态。

  • 用户后退回到此 Activity:系统会先调用 onRestart() 方法,然后调用 onStart() 方法,最后调用 onResume() 方法,再次进入运行状态。

  • 当前 Activity 处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前 Activity,而后用户退回当前 Activity:再次调用 onCreate() 方法、onStart() 方法、onResume() 方法,进入运行状态。

  • 用户退出当前 Activity:系统先调用 onPause() 方法,然后调用 onStop() 方法,最后调用onDestory() 方法,结束当前 Activity。

  • onRestart():表示 Activity 正在重新启动 ,一般情况下,当前 Activity 从不可见重新变成可见状态时,onRestart() 就会被调用,这种情形一般是用户行为所导致的,比如用户按 Home 键切换到桌面然后重新打开 APP 或者按 Back 键。

  • onStart():Activity 可见了,但是还没有出现在前台,还无法和用户交互。

  • onPause():表示 Activity 正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新 Activity 的显示,onPause() 必须先执行完,新的 Activity 的onResume() 才会执行。

  • 从 Activity 是否可见来说,onStart() 和onStop()是配对的,从activity是否在前台来说,onResume()和onPause()是配对的。

  • 旧 Activity 先 onPause(),然后新 Activity 再启动。

注意:当 Activity 中弹出 Dialog 对话框的时候,Activity 不会回调onPause()。 然而当 Activity 启动 Dialog 风格的 Activity 的时候,此 Activity 会回调 onPause() 函数。

三、异常情况下的生命周期 情况1:资源相关的系统配置发生改变导致 Activity 被杀死并重新创建

比如说当前 Activity 处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity 就会被销毁并且重新创建,当然我们也可以组织系统重新创建我们的 Activity。 生命周期 系统配置发生改变以后,Activity 会销毁,其 onPause(),onStop(),onDestory()均会被调用,由于 Activity 是在异常情况下终止的,系统会调用 onSaveInstance() 来保存当前 Activity 状态,这个方法的调用时机是在 onStop() 之前。与 onPause() 没有既定的时序关系,当 Activity 重新创建后,系统会调用 onRestoreInstanceState(),并且把 Activity 销毁时 onSaveInstanceState()方法保存的 Bundle 对象作为参数同时传递给 onRestoreInstanceState() 和 onCreate() 方法。 同时,在 onSaveInstanceState() 和 onRestoreInstanceState() 方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView 滚动的位置等,这些 View相关的状态系统都能够默认为我们恢复。可以查看 View 源码,和 Activity 一样,每个 View 都有 onSaveInstanceState()方法和onRestoreInstanceState()方法。

情况2:资源内存不足导致低优先级的 Activity 被杀死

这里的情况和前面的情况1数据存储和恢复是完全一致的,Activity 按照优先级从高到低可以分为如下三种: (1)前台 Activity — 正在和用户交互的Activity,优先级最高 (2)可见但非前台 Activity — 比如 Activity 中弹出了一个对话框,导致 Activity 可见但是位于后台无法和用户直接交互。 (3)后台 Activity — 已经被暂停的 Activity,比如执行了 onStop(),优先级最低。

横竖屏切换,防止重新创建 Activity:Activity 指定 configChange 属性来不让系统重新创建Activity。 android : configChanges = “orientation”

四、Activity 与 Fragment 生命周期关系

创建过程: 创建过程 销毁过程: 销毁过程

注意点

1. 生命周期方法是成对出现(配对)

  • onCreate() & onDestory()
  • onStart() & onStop()
  • onResume() & onPause()

2. onStart() & onStop()、onResume() & onPause() 除了回调时刻,在实际使用中无任何区别

  • onStart() & onStop() :从 Activity 是否完全可见的角度 进行回调
  • onResume() & onPause(): 从 Activity 是否位于前台(UI最顶层)的角度进行回调;

3. 当前 Activity 为 A,此时用户打开 ActivityB后,那么 A 的 onPause()和 B 的 onResume() 哪个方法先执行? 先 A的onPause() ,再B的onResume()

关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.1115s