Android开发基本学习笔记记录,本文章主题为百度百科中的章节,稍有改动。


Activity概述

Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service,Content Provider,Broadcast Receiver)之一。

Activity是一个应用程序组件,提供一个屏幕,可以为用户完成某项任务进行交互。

Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。

在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。


Activity的状态

在android 中,Activity 拥有四种基本状态:

1、Actived

一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。

2、Paused

当 Activity失去焦点, 被一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶,此时的状态叫做暂停状态(Paused)。此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。

3、Stoped

如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。

4. Killed

如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。


Activity的状态转换


图1 Activity的状态转换

如上所示,Android 程序员可以决定一个Activity 的“生”,但不能决定它的“死”,也就是说程序员可以启动一个 Activity,但是却不能手动的“结束”一个 Activity。

当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完成了相应的工作,可以被“回收”。随后 ActivityManager 激活处于栈第二层的 Activity 并重新入栈,同时原 Activity 被压入到栈的第二层,从 Active 状态转到 Stopped 状态。

例如:从 Activity1 中启动了Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们调用 Activity2.finish()方法时,Activity Manager 重新激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,Activity1.onActivityResult(intrequestCode, int resultCode, Intent data)方法被执行,Activity2返回的数据通过data参数返回给 Activity1。

Activity的方法通知

下面的图显示了Activity的重要状态转换,矩形框表明Activity在状态转换之间的回调接口,开发人员可以重载实现以便执行相关代码,带有颜色的椭圆形表明Activity所处的状态。

图2 Activity 的状态转换的方法和实现

在上图中,Activity有三个关键的循环:

1、整个的生命周期

从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。

2、可见的生命周期

从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。

3、前台的生命周期

从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。


理解Android之Activity生命周期,才能更好的设计Android应用程序。


关于Android生命周期的调试信息输出

根据生命对生命周期的理解,我做了一个样例,有两个Activity,分别为Activity1和Activity2,下面是输出的信息。

1、全生命周期,启动然后按Back按键退出:


2、可见生命周期,启动后,按Home键进入后台的输出


然后Home键再切换回前台的输出:



样例完美的演示了Activity的过程,对于理解生命周期还是很有帮助的。


更多相关文章

  1. Android——用XML的selector实现按钮多态
  2. Android(安卓)8.1隐藏状态栏图标的实例代码
  3. Android中四大组件概述以及各自作用
  4. Android状态栏透明方法,与工具栏颜色一致
  5. Android(安卓)Jetpack 之 LifeCycle
  6. Android(安卓)状态栏下拉列表添加自定义item开关
  7. Android中ConnectivityManager监听网络状态
  8. [置顶] Bottom Sheet
  9. 10天学通Android开发(4)-用户布局与常用控件

随机推荐

  1. Android(安卓)RelativeLayout 属性
  2. 【转】Android中gravity与layout_gravity
  3. Android--控件属性汇总
  4. Android异步处理三:Handler+Looper+Messag
  5. Android——导入已存在的android工程时出
  6. Android窗口机制(三)Window和WindowManager
  7. 用Eclipse开发Android应用程序(2): 开发
  8. Android学习笔记(一)——src和background区
  9. Android异步处理三:Handler+Looper+Messag
  10. Android中gravity与layout_gravity的区别