第3章Activity 学习目标  掌握Activity的生命周期。  掌握Activity的常用方法。  掌握显式和隐式意图的使用。  掌握Activity的启动方式。  掌握Activity中的数据传递方式。 在Android系统中,用户与程序的交互是通过Activity完成的,同时Activity也是Android四大组件中使用最多的一个,本章将详细讲解有关Activity的知识。 3.1Activity基础 3.1.1认识Activity Activity的中文意思是“活动”,它是Android应用中负责与用户交互的组件。相当于Swing编程中的JFrame控件,与其不同的是,JFrame本身可以设置布局管理器,不断地向其添加组件,而Activity只能通过setContentView(View)来显示布局文件中已经定义的组件。 在应用程序中,Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,下面是Activity的常用事件。  OnKeyDown(int keyCode,KeyEvent event): 按键按下事件。  OnKeyUp(int keyCode,KeyEvent event): 按键松开事件。  OnTouchEvent(MotionEvent event): 单击屏幕事件。 当用户按下手机界面上的按键时,就会触发Activity中对应的事件OnKeyDown()来响应用户的操作。3.1.2节会通过具体实例讲解Activity的常用事件。 3.1.2如何创建Activity 创建一个Activity的具体步骤如下。 (1) 定义一个类继承自android.app.Activity或其子类,如图31所示。 图31创建Activity (2) 在res/layout目录下创建一个xml文件,用于创建Activity的布局。 (3) 在app/manifests目录下的AndroidManifest.xml清单文件中注册Activity,如图32所示。 图32Activity注册 (4) 重写Activity的onCreate()方法,并在该方法中使用setContentView()加载指定的布局文件。新创建的Activity的具体代码如下: package com.jxust.cn.chapter3_1; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { //项目的入口Activity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置Activity显示的布局 setContentView(R.layout.activity_main); } } 接下来通过具体的例子讲解3.1.1节中几个Activity的常用事件,具体的Activity代码如下: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //响应按键按下事件 public boolean onKeyDown(int keyCode, KeyEvent event){ Toast.makeText(this,"按键已经按下了!",Toast.LENGTH_SHORT).show(); return super.onKeyDown(keyCode, event); } //响应按键松开事件 public boolean onKeyUp(int keyCode, KeyEvent event){ Toast.makeText(this,"按键松开了!",Toast.LENGTH_SHORT).show(); return super.onKeyDown(keyCode, event); } //响应屏幕触摸操作 public boolean onTouchEvent( MotionEvent event){ Toast.makeText(this,"触摸了屏幕!",Toast.LENGTH_SHORT).show(); return super.onTouchEvent(event); } } 运行效果如图33所示。 图33Activity常用事件 视频讲解 3.1.3Activity的生命周期 每一个Android应用程序在运行时,对于底层的Linux Kernel而言都是一个单独的进程,但是对于Android系统而言,因为局限于手机画面的大小与使用的考虑,不能把每一个运行中的应用程序窗口都显示出来。所以通常手机系统的界面一次仅显示一个应用程序窗口,Android使用了Activity的概念来表示界面。 Activity的生命周期分为3种状态,分别是运行状态、暂停状态和停止状态。下面将详细介绍这3种状态。  运行状态: 当Activity在屏幕最前端的时候,它是有焦点的、可见的,可以供用户进行单击、长按等操作,这种状态称为运行状态。  暂停状态: 在一些情况下,最上层的Activity没有完全覆盖屏幕,这时候被覆盖的Activity仍然对用户可见,并且存活。但当内存不足时,这个暂停状态的Activity可能会被杀死。  停止状态: 当Activity完全不可见时,它就处于了停止状态,但仍然保 留着当前状态和成员信息,当系统内存不足时,这个Activity就很容易被杀死。 Activity从一种状态变到另一种状态时会经过一系列Activity类的方法。常用的回调方法如下。  onCreate(Bundle savedInstanceState): 该方法在Activity的实例被Android系统创建后第一个被调用。通常在该方法中设置显示屏幕的布局、初始化数据、设置控件被单击的事件响应代码。  onStart(): 在Activity可见时执行。  onRestart(): 回到最上边的界面,再次可见时执行。  onResume(): Activity获取焦点时执行。  onPause(): Activity失去焦点时执行。  onStop(): 用户不可见,进入后台时执行。  onDestroy(): Activity销毁时执行。 为了更好地理解Activity的生命周期以及在Activity不同状态切换时所调用的方法,接下来将通过Google公司提供的一个Activity生命周期图来更生动地展示,如图34所示。 图34Activity的生命周期图 从图34中可以看出,Activity在从启动到关闭的过程中,会依次执行onCreate()→onStart()→onResume()→onPause()→onStop()→onDestroy()方法。如果进程被杀死,则会重新执行onCreate()方法。 为了更好地掌握Activity的生命周期中方法的执行过程,接下来将通过具体的例子来展现方法的执行顺序。 先创建一个布局界面,其中包含一个按钮,用来跳转到另一个Activity中使用,布局代码如下: