Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Activity生命周期全面分析

$
0
0

当你想跨入高级开发的时候,你会发现,你总是会欠缺很多基础的东西.


本文章将会将Activity的生命周期分为两部分进行讲解.一种是典型情况下.另一种是异常情况下的.

典型情况的生命周期是指:

由用户参与的情况下,Activity所经历的生命周期的改变.

异常情况是指:

Activity被系统回收或者是由于当前设备的Configuration发生改变从而导致Activity被销毁重建.

典型情况

在正常情况下,Activity会经历如下的生命周期

  • onCreate:表示Activity正在被创建,这是生命周期的第一个方法.在这个方法中我们可以做一些初始化操作.例如去设置加载布局资源(setContentView()),初始化Activity所需要的数据等.
  • onRestart:表示Activity重新被启动.一般情况下,当当前的Activity从不可见到可见的情况下就会调用onRestart()方法.这种情形一般都是用户的一些行为导致的,例如用户按下home键,又重新进入App,或者是用户打开新的页面,又按返回按钮,重新回到之前的页面就会出现这种情况
  • onStart:表示Activity正在被启动,即将开始,这是Activity已经可见了,但是还没有出现在前台.还无法和用户交互.我们可以理解为,Activity已经出现了,但是我们看不到.
  • onResume:表示Activity已经可见了.并且出现在了前台.已经可以活动.这个跟onStart()都是可见了,但是区别在于后者是可以看到了,前者还不可以看到.
  • onPause:表示Activity正在停止.正常情况下,紧着着onStop方法也会被调用.此时可以进行过度动画,存储数据等操作.但是注意一定不能耗时,不然会影响新的界面的展示.因为只有在之前onPause方法执行完毕,新的界面的onResume才会执行.
  • onStop:表示Activity将要停止,可以稍微做些重量级的回收工作.不能太耗时.
  • onDestroy:表示Activity即将被销毁,这是Activity生命周期方法的最后一个回调.在此时我们可以做些回收工作和资源释放等.

正常情况下,生命周期只有上边的七个,下图会进行说明.
这里写图片描述

针对此图在做些说明.

  • 针对一个特定的Activity,回调方法顺序如下.onCreate()–>onStart()–>Resume();
  • 当用户打开新的Activity或者切换到桌面的时候,回调顺序如下onPause()–>onStop();(如果遇到特殊情况,例如该Activity采用了透明的主题的话,那么就不会调用onStop()方法);
  • 当用户再次回到之前的Activity的时候,回调方法如下onRestart()–>onStart()–>onResume();
  • 当用户点击back键的时候,当前Activity的回调方法如下:onPause()–>onStop()–>onDestroy();
  • 当Activity被系统回收并重新打开的时候生命周期是onCreate()–>onStart()–>Resume();(只是生命周期方法一样,过程不一样)
  • 从整个生命周期来说.onCreate()和onDestroy()是配对的,分别标识着Activity的创建和销毁.并且只可能有一次调用.从是否可见来说onStart()和onStop()方法是配对的.随着用户的操作或者屏幕电量和熄灭,这两个方法会被调用多次.从是否在前台来说.onResume()和onPause()是配对的.随着用户的操作或者屏幕的点亮和熄灭,这两个方法会被调用多次.

一个Activity被打开的方法调用

04-08 03:26:42.873 1735-1735/cn.yuan.xiaoyu I/AActivity: onCreate()
04-08 03:26:42.873 1735-1735/cn.yuan.xiaoyu I/AActivity: onStart()
04-08 03:26:42.875 1735-1735/cn.yuan.xiaoyu I/AActivity: onResume()

A界面打开B界面方法调用

04-08 03:29:35.362 4205-4205/cn.yuan.xiaoyu I/AActivity: onPause()
04-08 03:29:35.406 4205-4205/cn.yuan.xiaoyu I/BActivity: onCreate()
04-08 03:29:35.407 4205-4205/cn.yuan.xiaoyu I/BActivity: onStart()
04-08 03:29:35.408 4205-4205/cn.yuan.xiaoyu I/BActivity: onResume()
04-08 03:29:36.194 4205-4205/cn.yuan.xiaoyu I/AActivity: onStop()

B界面按back键

04-08 03:30:32.405 4205-4205/cn.yuan.xiaoyu I/BActivity: onPause()
04-08 03:30:32.438 4205-4205/cn.yuan.xiaoyu I/AActivity: onRestart()
04-08 03:30:32.438 4205-4205/cn.yuan.xiaoyu I/AActivity: onStart()
04-08 03:30:32.438 4205-4205/cn.yuan.xiaoyu I/AActivity: onResume()
04-08 03:30:33.070 4205-4205/cn.yuan.xiaoyu I/BActivity: onStop()

异常情况

资源相关的系统配置发生改变导致Activity被杀死并重新创建

在默认情况下,如果我们的Activity不做特殊处理,那么当系统配置发生改变后,Activity就会被销毁并创建.如图所示:
这里写图片描述
当系统配置发生改变后,Activity会被销毁,其onPause(),onStop(),onDestroy()均会被调用.同时由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity的状态,这个方法的调用时机是在onStop()之前,这个方法只有在发生异常情况下才会调用,正常情况下,不会调用这个方法.当Activity重新被创建成功之后,系统会调用onRestoreInstanceState(),并且把Activity销毁时onSaveInstanceState()方法所保存的bundle对象作为参数同时传递给onRestoreInstanceState()和onCreate()方法.

作者:EaskShark 发表于2017/4/8 16:27:33 原文链接
阅读:184 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>