功能:
为用户呈现操作界面。多个Activity组成Activity栈,当前活动的Activity位于栈顶。
使用:
如图所示为Activity类及其基类:
AccountAuthenticatorActivity:实现账户管理界面的Activity;
TabActivity:实现Tab界面的Activity;
ListActivity:实现列表界面的Activity;
ExpabdableListActivity:实现可展开列表界面的Activity;
LauncherActivity:实现Activity列表界面的Activity,当单击列表项时,所对应的Activity被启动;
PreferenceActivity:实现程序参数设置,存储界面的Activity;
当我们开发一个Activity时,需要继承Activity类或者其子类。定义好Activity后,其何时被实例化,其方法何时被调用,由Android系统决定。
package com.surge.activity;
import android.os.Bundle;
import android.app.Activity;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
如上代码所示,定义了一个我们自己的Activity。在Activity里面实现后 onCreate(Bundle saveInstanceState)方法,并在其中为当前Activity设置显示的布局。
当在Activity打开时,即会显示如图:
配置Activity:
Activity 需要在AndroidManifest.xml中的<application.../>下进行显式配置:
<span style="white-space:pre"> </span><activity
android:name="com.surge.activity.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
配置Activity的通常配置属性:
name:指定该Activity的实现类的类名;
icon:指定该Activity对应的图标;
label:指定该Activity的标签;
exported:指定该Activity是否允许被其他应用调用。true为能,false为不能;
launchMode指定该Activity的加载模式,该属性支持 standard、singleTop、singleTask和singleInstance这4种加载模式;
除却上述属性外,通常还需要指定一个或多个<intent-filter.../>元素,用于指定该Activity可响应的Intent。
启动、关闭Activity:
Activity中启动其他Activity有如下两种方法:
1、startActivity(Intent intent'):启动其他Activity。
2、startActivityForResult(Intent intent , int requestCode):以指定的请求码(requestCode)启动Activity。
Activity为关闭Activity有如下两种方法:
1、finish():结束当前Activity。
2、finishActivity(int requestCode):结束以startActivityForResult(Intent intent , int requestCode)方法启动的Activity。
Activity之间的数据交换:
两个Activity之间会有Intent存在,只需将数据放入Intent中即可。
Intent提供携带数据的方法:
putExtras(Bundle data):向Intent中放入需要携带的数据包。
Bundle getExtras():取出Intent中所携带的数据包。
putExtra(String key, Xxx value):向Intent中按key-value对的形式存入数据。
getXxxExtra(String key):从Intent中按Key取出指定类型的数据。
上面的Bundle是一个简单的数据携带包,Bundle对象包含了多个方法来存入数据。
putXxx(String key, Xxx data):向Bundle中放入Int、Long等各种类型的数据。
putSerializable(String key, Serializable data):向Bundle中放入一个可序列化的对象。
Bundle为取出数据所提供的方法:
getXxx(String key):从Bundle取出Int、Long等类型的数据。
getSerializable(String key):从Bundle中取出可序列化的对象。
Activity的生命周期:
Activity大致会经过如下四个状态:
1、活动状态:当前Activity位于前台,用户可见,可以获得焦点。
2、暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。
‘ 3、停止状态:该Activity不可见,失去焦点。
4、销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束。
如图显示了Activity的声明周期和回调方法:
1、onCreate(Bundle savedStatus):创建Activity时被回调。只被执行一次。
2、onStart():启动Activity时被回调。
3、onRestart():重新启动Activity时被回调。
4、onResume():恢复Activity时被回调,onStart()方法后一定会回调这个方法。
5、onPause():暂停Activity时被回调。
6、onStop():停止Activity时被回调。
7、onDestory():销毁Activity时被回调,该方法只被执行一次。
Activity的4种加载模式:
在配置Activity时可为其配置加载模式,其中可用的属性值有如下4中:
1、standard:标准模式,这是默认的加载模式。每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中-----这种模式不会启动新的Task,新的Activity将被添加到原有的栈中。
2、single:Task顶单例模式。这种模式与standard基本相似,但有一点不同:当将要被启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activity的实例,而是直接复用已有的Activity实例。
3、singleTask:Task内单例模式。采用这种加载模式的Activity在同一个Task只有一个实例。其中有如下三种情况:
①、如果目标Activity实例不存在,将创建实例,并将其加入Task栈顶。
②、如果目标Activity已经位于Task栈顶,此时与singleTop模式的行为相同。
③、如果目标Activity已经存在,但未位于Task栈顶,系统将会把位于该Activity上面的所有Activity移出Task栈,从而使得目标Activity位于栈顶。
4、singleInstance:全局单例模式。采用这种加载模式,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。其中有如下两种情况:
①、如果目标Activity不存在,系统会先创建一个新的Task,再创建目标Activity的实例,然后把它加入新的Task的栈顶。
②、如果目标Activity已经存在,无论它位于哪个应用程序内中,不论它位于哪个Task中,系统将会把该Activity所在的Task转到前台,从而使该Activity显示出来。