Activit-简介(笔记)

Posted by Young Ken on 2016-05-31

官网对Activity的定义:

Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。

从官方的定义不难看出,Activity是一个组件,它的用途是提供用户和屏幕直接的交互和内容的展示。
一个应用程序有多个Activity组成,每个Activity都可以启动另一个Activity,每次启动新的Activity的时候,前一个Activity便会停止。系统会在返回栈中保存这Activity,当点击返回按钮的时候,这个Activity就会从新启动。

创建Activity

要创建Activity必须继承Activity类,需要在子类中实现父类的方法。

  • onCreate()
    您应该在实现内初始化 Activity 的必需组件。 最重要的是,您必须在此方法内调用 setContentView(),以定义 Activity 用户界面的布局。
  • onPause()
    系统将此方法作为用户离开 Activity 的第一个信号。

实现用户界面

Activity的界面是由继承View的视图组成。每个视图控制Activity的一个矩形区域,提供用户交互和内容展示。

在清单文件中声明 Activity

1
2
3
4
5
6
7
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >

name属性是Activity的类名称,每个Activity在清单文件中必须声明。

注释:当然如果你创建的Activity如果没有在应用程序中被启动,就不用进行声明。

使用 Intent 过滤器

元素还可指定各种 Intent 过滤器—使用 元素—以声明其他应用组件激活它的方法。

1
2
3
4
5
6
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

指定ExampleActivity是应用程序的主入口,这个Activity应该列入系统的应用启动器。

启动 Activity

你可以调用startActivity(),传入Intent来启动Activity。

1
2
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

这样就启动了一个SignInActivity。

这种启动方式叫做显示启动

当你想调用发送电子邮件的Activity怎么办,我现在想调用打电话的Activity怎么办?android提供了启动这样Activity的功能。

1
2
3
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);

这种启动方式叫做隐式启动

添加到 Intent 中的 EXTRA_EMAIL extra 是一个字符串数组,其中包含应将电子邮件发送到的电子邮件地址。

启动 Activity 以获得结果

当你想在A启动B,当B关闭时,把B的一些值传回给A,这个时候就用到了Activity的另一种启动方式,startActivityForResult()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void pickContact() {
// Create an intent to "pick" a contact, as defined by the content provider URI
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// If the request went well (OK) and the request was PICK_CONTACT_REQUEST
if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
// Perform a query to the contact's content provider for the contact's name
Cursor cursor = getContentResolver().query(data.getData(),
new String[] {Contacts.DISPLAY_NAME}, null, null, null);
if (cursor.moveToFirst()) { // True if the cursor is not empty
int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String name = cursor.getString(columnIndex);
// Do something with the selected contact's name...
}
}
}

上例显示的是,您在处理 Activity 结果时应该在 onActivityResult() 方法中使用的基本逻辑。第一个条件检查请求是否成功(如果成功,则resultCode 将为 RESULT_OK)以及此结果响应的请求是否已知 — 在此情况下,requestCode与随 startActivityForResult() 发送的第二个参数匹配。 代码通过查询 Intent 中返回的数据(data 参数)从该处开始处理 Activity 结果。

结束 Activity

您可以通过调用 Activity 的 finish() 方法来结束该 Activity。您还可以通过调用 finishActivity() 结束您之前启动的另一个 Activity。