Android Activity入门指南

移动开发 Android
本文介绍了Android Activity以及Activity的生命周期,并附实例,观察翻转屏幕导致的Activity状态变化。

一、理解Activity

Activity是Android程序的4大组件之一。

Activity是Android程序的表示层。程序的每一个显示屏幕就是一个Activity。

学过WEB开发的同学,可以把Activity理解成网页中的一个JSP文件;或者你可以把它理解成一个Windows的窗口。

下面看一下Activity类的继承关系:

1.png

从这里可以看到Activity是Context类的子类,大家对此先有个印象。

二、理解Activity的生命周期

手机最重要也是最基础的功能是打电话,也就意味着电话来的时候可能随时要把现在的程序暂停,如果电量不足的时候也可能随时要把现有程序关闭;因此 Android程序和电脑上的程序有所不同,具体到Activity,Activity的生命周期不是自身控制的,而是由Android系统控制的。

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

1、Running

位于屏幕最前端时,此时处于可见状态,和用户可交互的状态。

2、Paused

当Acitivy被另一个透明的或者非全屏的Activity覆盖时的状态叫Paused状态,虽然可见但不可交互。

3、Stop

当Activity被另外一个Activity覆盖、界面不可见时处于Stop状态。

4、Killed

Activity被系统杀死或者跟本没启动时就是Killed状态。

我们下面看一下Activity的生命周期:

2.jpg

下面是上图的简单翻译版本:

3.jpg

Activity栈:

Android通过Activity栈的方式来管理Activity。

4.png

正在运行的Activity 处在在栈的最顶端,它是运行状态的;

当有新Activity进入屏幕最上端时,原来的Activity就会被压入第二层,如果他的屏幕没有被完全遮盖,那么他处于Pause状态,如果他被遮盖那么他处于Stop状态。

当然不管你出于任何一层,都可能在系统觉得资源不足时被强行关闭,当然关闭时在栈底的程序最先被关闭。

譬 如:当你在程序中调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:他告诉 Activity Manager该Activity实例可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,把原 Activity 压入到栈的第二层,从 Running 状态转到 Paused 状态。

三.实例:观察翻转屏幕导致的Activity状态变化

Activity类中定义了和生命周期相关的一些方法,这些方法会在状态改变时被调用,譬如创建时调用的方法onCreate()。因此我们可以写一个程序,在程序的每个一个方法中写注释,然后看看运行时注释的打印顺序来跟踪Activity的状态变化。

 

下面是程序代码:

  1. package android.basic.lesson4;import android.app.Activity; 
  2. import android.os.Bundle; 
  3. import android.util.Log;public class MainActivityLife extends Activity { 
  4. String tag =”[MainActivityLife]“; 
  5. /** Called when the activity is first created. */ 
  6. @Override 
  7. public void onCreate(Bundle savedInstanceState) { 
  8. super.onCreate(savedInstanceState); 
  9. setContentView(R.layout.main); 
  10. Log.i(tag, “onCreate”); 
  11. }@Override 
  12. public void onStart(){ 
  13. super.onStart(); 
  14. Log.i(tag, “onStart”); 
  15. }@Override 
  16. public void onPause(){ 
  17. super.onPause(); 
  18. Log.i(tag, “onPause”); 
  19. }@Override 
  20. public void onResume(){ 
  21. super.onResume(); 
  22. Log.i(tag, “onResume”); 
  23. }@Override 
  24. public void onStop(){ 
  25. super.onStop(); 
  26. Log.i(tag, “onStop”); 
  27. }@Override 
  28. public void onDestroy(){ 
  29. super.onDestroy(); 
  30. Log.i(tag, “onDestroy”); 

然后调出LogCat工具,来观察程序的运行细节。通过LogCat的过滤器我们可以看到程序启动、屏幕翻转、按后退键程序退出的过程,这有助于我们验证刚才所学的知识。

5.jpg

我们可以看到屏幕翻转时,Android系统把ActivityLife这个Activity先杀死 (具体顺序是先暂停、后关闭再销毁),然后再启动(具体顺序是先创建,后启动再恢复)。通过这个例子我们也清楚的看到了,是Android系统而不是程序 员在控制Activity的生命周期。

责任编辑:徐川 来源: apkbus
相关推荐

2019-09-23 12:40:45

Android 10GoogleAndroid

2013-12-26 15:26:48

Android SDKActivity生命周期

2011-09-07 14:25:53

Android Wid设计

2011-03-08 09:22:37

2021-03-26 10:31:19

人工智能AIOps

2010-08-03 15:19:08

FlexBuilder

2011-05-18 15:15:44

MySQL

2017-11-27 13:09:00

AndroidGradle代码

2010-07-20 16:13:25

Perl线程

2010-12-31 13:30:12

2022-05-08 16:42:27

Rust编程语言

2011-01-10 13:21:45

linuxsamba

2015-09-24 09:54:32

物联网

2011-03-08 16:50:35

2019-07-18 07:52:01

路由策略IP路由

2019-10-12 00:24:29

微隔离SDN安全架构

2015-10-20 15:54:16

android源码滑动关闭

2012-02-17 17:07:30

Android安全Activity劫持

2021-03-15 08:18:10

Web安全黑客漏洞

2010-09-14 13:22:17

Scala编程指南Scala
点赞
收藏

51CTO技术栈公众号