Activity (活动) 是一个应用组件,用户可与其提供的屏幕进行交互,总的来说就是连接用户和应用的一个窗口,用于展示数据给用户并响应用户操作

要注意的是一般来说每个 Activity 都是要在应用清单文件(AndroidManifest.xml)里注册的,当然一般来说其他三大组件(服务)(广播接收)(内容提供)也是需要在应用清单中注册的,Activity 注册大致如下

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

Activity 标签还可以加入几个其他特性,以定义 Activity 标签、Activity 图标或风格主题等用于设置 Activity UI 风格的属性。 android:name 属性是唯一必需的属性—它指定 Activity 的类名。应用一旦发布,即不应更改此类名,否则,可能会破坏诸如应用快捷方式等一些功能,关于其他一些详细的属性可以参考 <activity> 官方文档,了解有关在应用清单文件中声明 Activity 的信息。

Activity 指定 Intent 过滤器,下面看看如何使用 Intent 过滤器定义应用主入口 Activity

<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>

如何启动 Activity ,通过调用 startActivity(),并将其传递给描述您想启动的 Activity 的 Intent 来启动另一个 Activity。Intent 对象会指定您想启动的具体 Activity 或描述您想执行的操作类型(系统会为您选择合适的 Activity,甚至是来自其他应用的 Activity)。 Intent 对象还可能携带少量供所启动 Activity 使用的数据。( 下面代码启动了一个 SignInActivity 活动,当然先要确保其已经创建并在应用清单中注册过了 )

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

怎么启动其他 APP 提供的一些 Activity ,例如调用系统电子邮件程序

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

启动 Activity 以获得结果,通过调用 startActivityForResult()( 而非 startActivity() )来启动 Activity。 要想在随后收到后续 Activity 的结果,请实现 onActivityResult() 回调方法。 当后续 Activity 完成时,它会使用 Intent 向 onActivityResult() 方法返回结果。

例如可能希望用户选取其中一位联系人,以便 Activity 对该联系人中的信息执行某项操作。 可以通过以下代码创建此类 Intent 并处理结果:

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 结果。

实际情况是,ContentResolver 对一个内容提供程序执行查询,后者返回一个 Cursor,让查询的数据能够被读取。