首页 > 移动平台 > 详细

Android(java)学习笔记170:Activity的生命周期

时间:2015-08-17 23:21:50      阅读:241      评论:0      收藏:0      [点我收藏+]

1.首先来一张生命周期的总图:

技术分享

 

2.几个典型的场景

(1)Activity从被装载到运行,执行顺序如下:

onCreate()  ->    onStart() ->  onResume();

(2)Activity从运行到暂停,再到继续回到运行

onPause() ->  onResume ()

       这个过程发生在Activity被别的Activity遮住了部分UI,失去了用户焦点,另外那个Activity退出之后,这个Activity再次获得运行。整个过程中,该Activity的实例是一直存在的。

(3)Activity运行到停止

onPause() -> onStop()

这个过程发生在Activity的UI完全被别的Activity遮住了,当然也失去了用户的焦点。这个过程中Activity的实例仍然存在。比如,当Activity运行的时候,用户了按了Home键,该Acitivity就会被执行。

 (4)Activity从停止到运行

onReset() ->  onStart() -> onResume() 

处于Stopped状态并且实例仍然存在的Activity,再次被系统运行时,执行这个过程。这个过程是(3)的逆过程。

(5)Activity从运行到销毁,执行顺序如下:

onPause() ->  onStop() -> onDestory()

这个过程发生在Activity完全停掉并被销毁了,所以该Activity的实例也就不存在了。比如这个Activity正在运行,用户按了Back按键,该Activity就会执行这个过程。这个过程是(1)的逆过程。

(6)被清除出内存的Activity的重新运行

onCreate() -> onStart() -> onResume()

这个过程对用户是透明的,用户不知道这个过程的发生。

 

3.Activity的实例化和启动

技术分享

 

Acitivity实例的工作是android系统完成的,在用户点击执行一个Activity或者另一个Activity需要这个Activity执行时,如果这个Activity的实例不存在,Android系统都会实例化之,并且在该Activity所在线程的主线程中调用Activity的onCreate()方法,实现Activity的工作。

onCreate()是系统实例化Activity时,Activity可做的自身初始化的时机。在这里可以实例化变量,调用setContentView()设置UI显示内容。

一般来说,在Activity实例化之后就好启动该Activity,这样会在该Activity所在的进程的主线程中顺序调用Activity的onStart(),onResume()。onCreate()在Acitivity存续期中,只会被调用一次。如生命周期图中时序(6)的情形其实是另外又开启一个Activity的实例,并通过onCreate的参数传递进先前杀掉的Acitivity保存的信息。因为onStart()可因为已经停止了,再次执行而被调用多次。onResume()可以因为Activity的Paused/Resumed的不停转换,而被频繁调用。

 

4.Activity的暂停和继续

技术分享

 

5.Activity的关闭/销毁与重新运行

6.Activity的启动模式

(1)standard(默认)

(2)singleTop

       singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)。不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。还是用刚才的示例,只需将launchMode改为singleTop,就能看到区别。运行的时候会发现,按多少遍按钮,都是相同的ActiA实例,因为该实例在栈顶,因此不会创建新的实例。如果回退,将退出应用。

技术分享

技术分享

(3)singleTask

       singleTask模式和后面的singleInstance模式都是只创建一个实例的。当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

(4)singleInstance

首先要说一下Task(任务)的概念。如果是Swing或者Windows程序,可能有多个窗口可以切换,但是你无法在自己程序中复用人家的窗口。注意是直接复用人家的二进制代码,不是你拿到人家api后的源代码级调用。Android可以做到,让别人的程序直接复用你的Activity(类似桌面程序的窗口)。Android为提供这种机制,就引入了Task的概念。Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,就是intent-filter中配置为main和launch的那个(见一个APK文件部署产生多个应用安装的效果)。这个Activity是根(Root)Activity,可能会在它的界面调用其他Activity,这些Activity如果按照上面那三个模式,也会在这个栈(Task)中,只是实例化的策略不同而已。

Android(java)学习笔记170:Activity的生命周期

原文:http://www.cnblogs.com/hebao0514/p/4737887.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!