From a8acdbd13cfb71378bd5400340d5e767922c68d6 Mon Sep 17 00:00:00 2001
From: David Friedman 当用户导航、退出和返回您的应用时,应用中的 {@link android.app.Activity} 实例将在其生命周期中转换不同状态。
-例如,当您的活动初次开始时,它将出现在系统前台并接收用户焦点。
+例如,当您的Activity初次开始时,它将出现在系统前台并接收用户焦点。
-在这个过程中,Android 系统会对活动调用一系列生命周期方法,通过这些方法,您可以设置用户界面和其他组件。
-如果用户执行开始另一活动或切换至另一应用的操作,当其进入后台(在其中活动不再可见,但实例及其状态完整保留),系统会对您的活动调用另外一系列生命周期方法。
+在这个过程中,Android 系统会对Activity调用一系列生命周期方法,通过这些方法,您可以设置用户界面和其他组件。
+如果用户执行开始另一Activity或切换至另一应用的操作,当其进入后台(在其中Activity不再可见,但实例及其状态完整保留),系统会对您的Activity调用另外一系列生命周期方法。
在生命周期回调方法内,您可以声明
-用户离开和再次进入活动时的活动行为。比如,如果您正构建流视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。
+用户离开和再次进入Activity时的Activity行为。比如,如果您正构建流视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。
本课讲述每个 {@link
-android.app.Activity} 实例接收的重要生命周期回调方法以及您如何使用这些方法以使您的活动按照用户预期进行并且当您的活动不需要它们时不会消耗系统资源。
+android.app.Activity} 实例接收的重要生命周期回调方法以及您如何使用这些方法以使您的Activity按照用户预期进行并且当您的Activity不需要它们时不会消耗系统资源。
在正常使用应用的过程中,前台活动有时会被其他导致活动暂停的可视组件阻挡。
-例如,当半透明活动打开时(比如对话框样式中的活动),上一个活动会暂停。
-只要活动仍然部分可见但目前又未处于焦点之中,它会一直暂停。
+ 在正常使用应用的过程中,前台Activity有时会被其他导致Activity暂停的可视组件阻挡。
+例如,当半透明Activity打开时(比如对话框样式中的Activity),上一个Activity会暂停。
+只要Activity仍然部分可见但目前又未处于焦点之中,它会一直暂停。
但是,一旦活动完全被阻挡并且不可见,它便停止(将在下一堂课中讨论)。
+ 但是,一旦Activity完全被阻挡并且不可见,它便停止(将在下一堂课中讨论)。
当您的活动进入暂停状态时,系统会对您的 {@link android.app.Activity} 调用 {@link
-android.app.Activity#onPause onPause()} 方法,通过该方法,您可以停止不应在暂停时继续的进行之中的操作(比如视频)或保留任何应该永久保存的信息,以防用户坚持离开应用。如果用户从暂停状态返回到您的活动,系统会重新开始该活动并调用
+ 当您的Activity进入暂停状态时,系统会对您的 {@link android.app.Activity} 调用 {@link
+android.app.Activity#onPause onPause()} 方法,通过该方法,您可以停止不应在暂停时继续的进行之中的操作(比如视频)或保留任何应该永久保存的信息,以防用户坚持离开应用。如果用户从暂停状态返回到您的Activity,系统会重新开始该Activity并调用
{@link android.app.Activity#onResume onResume()} 方法。
注意:当您的活动收到对 {@link
-android.app.Activity#onPause()} 的调用时,可能意味着活动将暂停
-一会,并且用户可能从焦点返回到您的活动。但这通常意味着用户即将离开您的活动。
+ 注意:当您的Activity收到对 {@link
+android.app.Activity#onPause()} 的调用时,可能意味着Activity将暂停
+一会,并且用户可能从焦点返回到您的Activity。但这通常意味着用户即将离开您的Activity。
当系统为您的活动调用 {@link android.app.Activity#onPause()} 时,它从技术角度看意味着您的活动仍然处于部分可见状态,但往往说明用户即将离开活动并且它很快就要进入“停止”状态。
+ 当系统为您的Activity调用 {@link android.app.Activity#onPause()} 时,它从技术角度看意味着您的Activity仍然处于部分可见状态,但往往说明用户即将离开Activity并且它很快就要进入“停止”状态。
您通常应使用
{@link android.app.Activity#onPause()} 回调: 一般情况下,您不得使用 {@link android.app.Activity#onPause()} 永久性存储用户更改(比如输入表格的个人信息)。
只有在您确定用户希望自动保存这些更改的情况(比如,电子邮件草稿)下,才能在 {@link android.app.Activity#onPause()}中永久性存储用户更改。但您应避免在 {@link
-android.app.Activity#onPause()} 期间执行 CPU 密集型工作,比如向数据库写入信息,因为这会拖慢向下一活动过渡的过程(您应改为在
+android.app.Activity#onPause()} 期间执行 CPU 密集型工作,比如向数据库写入信息,因为这会拖慢向下一Activity过渡的过程(您应改为在
{@link android.app.Activity#onStop onStop()}期间执行高负载关机操作。
@@ -101,30 +101,30 @@ android.app.Activity#onPause()} 期间执行 CPU 密集型工作,比如向数
您应通过相对简单的方式在 {@link android.app.Activity#onPause
-onPause()} 方法中完成大量操作,这样才能加快在您的活动确实停止的情况下用户向下一个目标过渡的速度。
+onPause()} 方法中完成大量操作,这样才能加快在您的Activity确实停止的情况下用户向下一个目标过渡的速度。
注意:当您的活动暂停时,{@link
-android.app.Activity} 实例将驻留在内存中并且在活动继续时被再次调用。您无需重新初始化在执行任何导致进入“继续”状态的回调方法期间创建的组件。
+ 注意:当您的Activity暂停时,{@link
+android.app.Activity} 实例将驻留在内存中并且在Activity继续时被再次调用。您无需重新初始化在执行任何导致进入“继续”状态的回调方法期间创建的组件。
当用户从“暂停”状态继续您的活动时,系统会调用 {@link
+ 当用户从“暂停”状态继续您的Activity时,系统会调用 {@link
android.app.Activity#onResume()} 方法。 请注意,每当您的活动进入前台时系统便会调用此方法,包括它初次创建之时。
+ 请注意,每当您的Activity进入前台时系统便会调用此方法,包括它初次创建之时。
同样地,您应实现{@link
android.app.Activity#onResume()} 初始化您在 {@link
-android.app.Activity#onPause()} 期间释放的组件并且执行每当活动进入“继续”状态时必须进行的任何其他初始化操作(比如开始动画和初始化只在活动具有用户焦点时使用的组件)。
+android.app.Activity#onPause()} 期间释放的组件并且执行每当Activity进入“继续”状态时必须进行的任何其他初始化操作(比如开始动画和初始化只在Activity具有用户焦点时使用的组件)。
{@link android.app.Activity#onResume()} 的以下示例对应于以上的
- {@link android.app.Activity#onPause()} 示例,因此它初始化活动暂停时释放的照相机。
+ {@link android.app.Activity#onPause()} 示例,因此它初始化Activity暂停时释放的照相机。
在有些情况下,您的活动会因正常应用行为而销毁,比如当用户按 返回按钮或您的活动通过调用
+ 在有些情况下,您的Activity会因正常应用行为而销毁,比如当用户按 返回按钮或您的Activity通过调用
{@link android.app.Activity#finish()}示意自己的销毁。
-如果活动当前被停止或长期未使用,或者前台活动需要更多资源以致系统必须关闭后台进程恢复内存,系统也可能会销毁活动。
+如果Activity当前被停止或长期未使用,或者前台Activity需要更多资源以致系统必须关闭后台进程恢复内存,系统也可能会销毁Activity。
当您的活动因用户按了返回 或活动自行完成而被销毁时,系统的 {@link android.app.Activity} 实例概念将永久消失,因为行为指示不再需要活动。
+ 当您的Activity因用户按了返回 或Activity自行完成而被销毁时,系统的 {@link android.app.Activity} 实例概念将永久消失,因为行为指示不再需要Activity。
-但是,如果系统因系统局限性(而非正常应用行为)而销毁活动,尽管
-{@link android.app.Activity} 实际实例已不在,系统会记住其存在,这样,如果用户导航回实例,系统会使用描述活动被销毁时状态的一组已保存数据创建活动的新实例。
+但是,如果系统因系统局限性(而非正常应用行为)而销毁Activity,尽管
+{@link android.app.Activity} 实际实例已不在,系统会记住其存在,这样,如果用户导航回实例,系统会使用描述Activity被销毁时状态的一组已保存数据创建Activity的新实例。
系统用于恢复先前状态的已保存数据被称为“实例状态”,并且是
{@link android.os.Bundle} 对象中存储的键值对集合。
注意:每次用户旋转屏幕时,您的活动将被销毁并重新创建。
-当屏幕方向变化时,系统会销毁并重新创建前台活动,因为屏幕配置已更改并且您的活动可能需要加载备用资源(比如布局)。
+ 注意:每次用户旋转屏幕时,您的Activity将被销毁并重新创建。
+当屏幕方向变化时,系统会销毁并重新创建前台Activity,因为屏幕配置已更改并且您的Activity可能需要加载备用资源(比如布局)。
默认情况下,系统会使用 {@link android.os.Bundle} 实例状态保存您的活动布局(比如,输入到 {@link android.widget.EditText} 对象中的文本值)中有关每个 {@link android.view.View} 对象的信息。
+ 默认情况下,系统会使用 {@link android.os.Bundle} 实例状态保存您的Activity布局(比如,输入到 {@link android.widget.EditText} 对象中的文本值)中有关每个 {@link android.view.View} 对象的信息。
-这样,如果您的活动实例被销毁并重新创建,布局状态便恢复为其先前的状态,且您无需代码。
+这样,如果您的Activity实例被销毁并重新创建,布局状态便恢复为其先前的状态,且您无需代码。
-但是,您的活动可能具有您要恢复的更多状态信息,比如跟踪用户在活动中进度的成员变量。
+但是,您的Activity可能具有您要恢复的更多状态信息,比如跟踪用户在Activity中进度的成员变量。
注意:为了 Android 系统恢复活动中视图的状态,每个视图必须具有
+ 注意:为了 Android 系统恢复Activity中视图的状态,每个视图必须具有
{@code
android:id} 属性提供的唯一 ID。
要保存有关活动状态的其他数据,您必须替代
- {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 回调方法。当用户要离开活动并在活动意外销毁时向其传递将保存的 {@link android.os.Bundle} 对象时,系统会调用此方法。
+ 要保存有关Activity状态的其他数据,您必须替代
+ {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 回调方法。当用户要离开Activity并在Activity意外销毁时向其传递将保存的 {@link android.os.Bundle} 对象时,系统会调用此方法。
-如果系统必须稍后重新创建活动实例,它会将相同的 {@link
+如果系统必须稍后重新创建Activity实例,它会将相同的 {@link
android.os.Bundle} 对象同时传递给 {@link android.app.Activity#onRestoreInstanceState
onRestoreInstanceState()} 和 {@link android.app.Activity#onCreate onCreate()}
方法。
当您的活动开始停止时,系统会调用 {@link android.app.Activity#onSaveInstanceState
-onSaveInstanceState()} 以便您的活动可以保存带有键值对集合的状态信息。
-此方法的默认实现保存有关活动视图层次的状态信息,例如 {@link android.widget.EditText} 小工具中的文本或{@link android.widget.ListView} 的滚动位置。
+ 当您的Activity开始停止时,系统会调用 {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()} 以便您的Activity可以保存带有键值对集合的状态信息。
+此方法的默认实现保存有关Activity视图层次的状态信息,例如 {@link android.widget.EditText} 小工具中的文本或{@link android.widget.ListView} 的滚动位置。
要保存活动的更多状态信息,您必须实现 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 并将键值对添加至 {@link android.os.Bundle} 对象。
+ 要保存Activity的更多状态信息,您必须实现 {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()} 并将键值对添加至 {@link android.os.Bundle} 对象。
例如: 当您的活动在先前销毁之后重新创建时,您可以从系统向活动传递的
+ 当您的Activity在先前销毁之后重新创建时,您可以从系统向Activity传递的
{@link android.os.Bundle}
恢复已保存的状态。{@link android.app.Activity#onCreate onCreate()} 和 {@link
android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} 回调方法均接收包含实例状态信息的相同 {@link android.os.Bundle}。
因为无论系统正在创建活动的新实例还是重新创建先前的实例,都会调用 {@link android.app.Activity#onCreate onCreate()} 方法,因此您必须在尝试读取它之前检查状态 {@link android.os.Bundle} 是否为 null。
+ 因为无论系统正在创建Activity的新实例还是重新创建先前的实例,都会调用 {@link android.app.Activity#onCreate onCreate()} 方法,因此您必须在尝试读取它之前检查状态 {@link android.os.Bundle} 是否为 null。
-如果为 null,则系统将创建活动的新实例,而不是恢复已销毁的先前实例。
+如果为 null,则系统将创建Activity的新实例,而不是恢复已销毁的先前实例。
您还应阅读
@@ -36,37 +36,37 @@ startpage=true
课程
-
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd
index 23fc9f4..ef5b0d5 100644
--- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/pausing.jd
@@ -1,5 +1,5 @@
-page.title=暂停和继续活动
-page.tags=活动生命周期
+page.title=暂停和继续Activity
+page.tags=Activity生命周期
helpoutsWidget=true
trainingnavtop=true
@@ -11,13 +11,13 @@ trainingnavtop=true
本课程将向您展示如何
-
您还应阅读
@@ -31,36 +31,36 @@ trainingnavtop=true
-暂停活动
+暂停Activity
-继续活动
+继续Activity
-
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd
index a91ed78..a7971d8 100644
--- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/recreating.jd
@@ -1,5 +1,5 @@
-page.title=重新创建活动
-page.tags=活动生命周期
+page.title=重新创建Activity
+page.tags=Activity生命周期
helpoutsWidget=true
trainingnavtop=true
@@ -11,8 +11,8 @@ trainingnavtop=true
本课程将向您展示如何
-
您还应阅读
@@ -20,60 +20,60 @@ trainingnavtop=true
保存活动状态
+保存Activity状态
-恢复活动状态
+恢复Activity状态
-
要了解更多有关因运行时重启事件(例如屏幕旋转时)而重新创建活动的信息,请阅读处理运行时更改。 +
要了解更多有关因运行时重启事件(例如屏幕旋转时)而重新创建Activity的信息,请阅读处理运行时更改。
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd index ab54a58..05f9728 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd @@ -1,5 +1,5 @@ -page.title=开始活动 -page.tags=活动生命周期 +page.title=开始Activity +page.tags=Activity生命周期 helpoutsWidget=true trainingnavtop=true @@ -13,14 +13,14 @@ trainingnavtop=true不同于使用 {@code main()} 方法启动应用的其他编程范例,Android 系统会通过调用对应于其生命周期中特定阶段的特定回调方法在 {@link android.app.Activity} 实例中启动代码。 -有一系列可启动活动的回调方法,以及一系列可分解活动的回调方法。 +有一系列可启动Activity的回调方法,以及一系列可分解Activity的回调方法。
-本课程概述了最重要的生命周期方法,并向您展示如何处理创建活动新实例的第一个生命周期回调。 +
本课程概述了最重要的生命周期方法,并向您展示如何处理创建Activity新实例的第一个生命周期回调。
在活动的生命周期中,系统会按类似于阶梯金字塔的顺序调用一组核心的生命周期方法。 -也就是说,活动生命周期的每个阶段就是金字塔上的一阶。 -当系统创建新活动实例时,每个回调方法会将活动状态向顶端移动一阶。 -金字塔的顶端是活动在前台运行并且用户可以与其交互的时间点。 +
在Activity的生命周期中,系统会按类似于阶梯金字塔的顺序调用一组核心的生命周期方法。 +也就是说,Activity生命周期的每个阶段就是金字塔上的一阶。 +当系统创建新Activity实例时,每个回调方法会将Activity状态向顶端移动一阶。 +金字塔的顶端是Activity在前台运行并且用户可以与其交互的时间点。
-当用户开始离开活动时,系统会调用其他方法在金字塔中将活动状态下移,从而销毁活动。 -在有些情况下,活动将只在金字塔中部分下移并等待(比如,当用户切换到其他应用时),活动可从该点开始移回顶端(如果用户返回到该活动),并在用户停止的位置继续。 +
当用户开始离开Activity时,系统会调用其他方法在金字塔中将Activity状态下移,从而销毁Activity。 +在有些情况下,Activity将只在金字塔中部分下移并等待(比如,当用户切换到其他应用时),Activity可从该点开始移回顶端(如果用户返回到该Activity),并在用户停止的位置继续。
- -根据活动的复杂程度,您可能不需要实现所有生命周期方法。 +
根据Activity的复杂程度,您可能不需要实现所有生命周期方法。 但是,了解每个方法并实现确保您的应用按照用户期望的方式运行的方法非常重要。 -正确实现您的活动生命周期方法可确保您的应用按照以下几种方式良好运行,包括: +正确实现您的Activity生命周期方法可确保您的应用按照以下几种方式良好运行,包括:
正如您将要在以下课程中要学习的,有活动会在图 1 所示不同状态之间过渡的几种情况。 +
正如您将要在以下课程中要学习的,有Activity会在图 1 所示不同状态之间过渡的几种情况。 但是,这些状态中只有三种可以是静态。 -也就是说,活动只能在三种状态之一下存在很长时间。 +也就是说,Activity只能在三种状态之一下存在很长时间。
当用户从主屏幕选择您的应用图标时,系统会为您已声明为“启动器”( 或“主要”)活动的应用中的 {@link android.app.Activity} 调用 {@link +
当用户从主屏幕选择您的应用图标时,系统会为您已声明为“启动器”( 或“主要”)Activity的应用中的 {@link android.app.Activity} 调用 {@link android.app.Activity#onCreate onCreate()} 方法。 这是作为 -您的应用的用户界面主入口的活动。
+您的应用的用户界面主入口的Activity。 -您可以在 Android 宣示说明文件中 {@code AndroidManifest.xml} 定义哪个活动用作主活动,该说明文件位于您项目目录的根目录中。 +
您可以在 Android 宣示说明文件中 {@code AndroidManifest.xml} 定义哪个Activity用作主Activity,该说明文件位于您项目目录的根目录中。
-您的应用的主活动必须使用 {@code
+ 您的应用的主Activity必须使用 {@code
<intent-filter>}(包括 {@link
android.content.Intent#ACTION_MAIN MAIN} 操作和
{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别)在宣示说明中声明。例如:
如果未对您的活动之一声明 {@link android.content.Intent#ACTION_MAIN MAIN} 操作或 +
如果未对您的Activity之一声明 {@link android.content.Intent#ACTION_MAIN MAIN} 操作或 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别,那么您的应用图标将不会出现在应用的主屏幕列表中。
@@ -174,19 +174,19 @@ android.content.Intent#ACTION_MAIN MAIN} 操作和大多数应用包含若干个不同的活动,用户可通过这些活动执行不同的操作。无论活动是用户单击您的应用图标时创建的主活动还是您的应用在响应用户操作时开始的其他活动,系统都会通过调用其 {@link +
大多数应用包含若干个不同的Activity,用户可通过这些Activity执行不同的操作。无论Activity是用户单击您的应用图标时创建的主Activity还是您的应用在响应用户操作时开始的其他Activity,系统都会通过调用其 {@link android.app.Activity#onCreate onCreate()} 方法创建 {@link android.app.Activity} 的每个新实例。
-您必须实现 {@link android.app.Activity#onCreate onCreate()} 方法执行只应在活动整个生命周期出现一次的基本 +
您必须实现 {@link android.app.Activity#onCreate onCreate()} 方法执行只应在Activity整个生命周期出现一次的基本 应用启动逻辑。例如,您的 {@link android.app.Activity#onCreate onCreate()} 的实现应定义用户界面并且可能实例化某些类范围变量。
例如,{@link android.app.Activity#onCreate onCreate()} -方法的以下示例显示执行活动某些基本设置的一些代码,比如声明用户界面(在 XML 布局文件中定义)、定义成员变量,以及配置某些 UI。 +方法的以下示例显示执行Activity某些基本设置的一些代码,比如声明用户界面(在 XML 布局文件中定义)、定义成员变量,以及配置某些 UI。
@@ -220,26 +220,26 @@ public void onCreate(Bundle savedInstanceState) {一旦 {@link android.app.Activity#onCreate onCreate()} 完成执行操作,系统会相继调用 {@link android.app.Activity#onStart()} 和 {@link android.app.Activity#onResume()} 方法。 -您的活动从不会驻留在“已创建”或“已开始”状态。在技术上,活动会在 {@link android.app.Activity#onStart()} 被调用时变得可见,但紧接着是 -{@link android.app.Activity#onResume()},且活动保持“继续”状态,直到有事情发生使其发生变化,比如当接听来电时,用户导航至另一个活动,或设备屏幕关闭。 +您的Activity从不会驻留在“已创建”或“已开始”状态。在技术上,Activity会在 {@link android.app.Activity#onStart()} 被调用时变得可见,但紧接着是 +{@link android.app.Activity#onResume()},且Activity保持“继续”状态,直到有事情发生使其发生变化,比如当接听来电时,用户导航至另一个Activity,或设备屏幕关闭。
-在接下来的其他课程中,您将看到其他活动如何启动方法,当用于从“暂停”或“停止”状态继续活动时,{@link -android.app.Activity#onStart()} 和 {@link android.app.Activity#onResume()} 在您的活动生命周期中特别有用。 +
在接下来的其他课程中,您将看到其他Activity如何启动方法,当用于从“暂停”或“停止”状态继续Activity时,{@link +android.app.Activity#onStart()} 和 {@link android.app.Activity#onResume()} 在您的Activity生命周期中特别有用。
注意:{@link android.app.Activity#onCreate onCreate()}
-方法包括一个称为 savedInstanceState
的参数,将在有关重新创建活动的后续课程中讨论该参数。
+方法包括一个称为 savedInstanceState
的参数,将在有关重新创建Activity的后续课程中讨论该参数。
当活动的第一个生命周期回调是 {@link android.app.Activity#onCreate -onCreate()} 时,它最近的回调是 {@link android.app.Activity#onDestroy}。系统会对您的活动调用此方法,作为您的活动实例完全从系统内存删除的最终信号。 +
当Activity的第一个生命周期回调是 {@link android.app.Activity#onCreate +onCreate()} 时,它最近的回调是 {@link android.app.Activity#onDestroy}。系统会对您的Activity调用此方法,作为您的Activity实例完全从系统内存删除的最终信号。
-大多数应用不需要实现此方法,因为本地类引用与活动一同销毁,并且您的活动应在 {@link +
大多数应用不需要实现此方法,因为本地类引用与Activity一同销毁,并且您的Activity应在 {@link android.app.Activity#onPause} 和 {@link android.app.Activity#onStop} 期间执行大多数清理操作。 -但是,如果您的活动包含您在 {@link +但是,如果您的Activity包含您在 {@link android.app.Activity#onCreate onCreate()} 期间创建的后台线程或其他如若未正确关闭可能导致内存泄露的长期运行资源,您应在 {@link android.app.Activity#onDestroy} 期间终止它们。 @@ -278,8 +278,8 @@ public void onDestroy() { android.app.Activity#onStop} 之后都会调用 {@link android.app.Activity#onDestroy} ,只有一个例外:当您从 {@link android.app.Activity#onCreate onCreate()} 方法内调用 {@link -android.app.Activity#finish()} 时。在有些情况下,比如当您的活动作为临时决策工具运行以启动另一个活动时,您可从 {@link -android.app.Activity#onCreate onCreate()} 内调用 {@link android.app.Activity#finish()} 来销毁活动。 +android.app.Activity#finish()} 时。在有些情况下,比如当您的Activity作为临时决策工具运行以启动另一个Activity时,您可从 {@link +android.app.Activity#onCreate onCreate()} 内调用 {@link android.app.Activity#finish()} 来销毁Activity。 在这种情况下,系统会立刻调用 {@link android.app.Activity#onDestroy},而不调用任何其他 生命周期方法。
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd index e10dff6..630817c 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/stopping.jd @@ -1,5 +1,5 @@ -page.title=停止并重新开始活动 -page.tags=活动生命周期 +page.title=停止并重新开始Activity +page.tags=Activity生命周期 helpoutsWidget=true trainingnavtop=true @@ -11,13 +11,13 @@ trainingnavtop=true正确停止和重新开始活动是活动生命周期中的重要过程,其可确保您的用户知晓应用始终保持活动状态并且不会丢失进度。有几种活动停止和重新开始的关键场景: +
正确停止和重新开始Activity是Activity生命周期中的重要过程,其可确保您的用户知晓应用始终保持Activity状态并且不会丢失进度。有几种Activity停止和重新开始的关键场景:
{@link android.app.Activity} 课程提供两种生命周期方法:{@link -android.app.Activity#onStop()} 和 {@link android.app.Activity#onRestart()},这些方法允许您专门处理正在停止和重新开始的活动。 -不同于识别部分 UI 阻挡的暂停状态,停止状态保证 UI 不再可见,且用户的焦点在另外的活动(或完全独立的应用)中。 +android.app.Activity#onStop()} 和 {@link android.app.Activity#onRestart()},这些方法允许您专门处理正在停止和重新开始的Activity。 +不同于识别部分 UI 阻挡的暂停状态,停止状态保证 UI 不再可见,且用户的焦点在另外的Activity(或完全独立的应用)中。
注意:因为系统在停止时会将您的 {@link android.app.Activity} 实例保留在系统内存中,您根本无需实现 {@link android.app.Activity#onStop()} 和 {@link android.app.Activity#onRestart()}或甚至{@link -android.app.Activity#onStart()} 方法。对于大多数相对简单的活动而言, 活动将停止并重新开始,并且您可能只需使用 {@link +android.app.Activity#onStart()} 方法。对于大多数相对简单的Activity而言, Activity将停止并重新开始,并且您可能只需使用 {@link android.app.Activity#onPause()} 暂停正在进行的操作,并从系统资源断开连接。
- -当您的活动收到 {@link android.app.Activity#onStop()} 方法的调用时,它不再可见,并且应释放几乎所有用户不使用时不需要的资源。 +
当您的Activity收到 {@link android.app.Activity#onStop()} 方法的调用时,它不再可见,并且应释放几乎所有用户不使用时不需要的资源。 -一旦您的活动停止,如果需要恢复系统内存,系统可能会销毁该实例。 -在极端情况下,系统可能会仅终止应用进程,而不会调用活动的最终 {@link android.app.Activity#onDestroy()} 回调,因此您使用 {@link android.app.Activity#onStop()} 释放可能泄露内存的资源非常重要。 +一旦您的Activity停止,如果需要恢复系统内存,系统可能会销毁该实例。 +在极端情况下,系统可能会仅终止应用进程,而不会调用Activity的最终 {@link android.app.Activity#onDestroy()} 回调,因此您使用 {@link android.app.Activity#onStop()} 释放可能泄露内存的资源非常重要。
@@ -108,38 +108,38 @@ protected void onStop() { } -当您的活动停止时, {@link android.app.Activity} 对象将驻留在内存中并在活动继续时被再次调用。 +
当您的Activity停止时, {@link android.app.Activity} 对象将驻留在内存中并在Activity继续时被再次调用。 您无需重新初始化在任何导致进入“继续”状态的回调方法过程中创建的组件。 系统还会在布局中跟踪每个 {@link android.view.View} 的当前状态,如果用户在 {@link android.widget.EditText} 小工具中输入文本,该内容会保留,因此您无需保存即可恢复它。
-注意:即使系统在活动停止时销毁了活动,它仍会保留 {@link android.os.Bundle}(键值对的二进制大对象)中的 {@link android.view.View} 对象(比如 {@link -android.widget.EditText} 中的文本),并在用户导航回活动的相同实例时恢复它们 (下一堂课 讲述更多有关在您的活动被销毁且重新创建的情况下使用 {@link android.os.Bundle} 保存其他数据状态的知识)。 +
注意:即使系统在Activity停止时销毁了Activity,它仍会保留 {@link android.os.Bundle}(键值对的二进制大对象)中的 {@link android.view.View} 对象(比如 {@link +android.widget.EditText} 中的文本),并在用户导航回Activity的相同实例时恢复它们 (下一堂课 讲述更多有关在您的Activity被销毁且重新创建的情况下使用 {@link android.os.Bundle} 保存其他数据状态的知识)。
-当您的活动从停止状态返回前台时,它会接收对 -{@link android.app.Activity#onRestart()} 的调用。系统还会在每次您的活动变为可见时调用 {@link +
当您的Activity从停止状态返回前台时,它会接收对 +{@link android.app.Activity#onRestart()} 的调用。系统还会在每次您的Activity变为可见时调用 {@link android.app.Activity#onStart()} 方法(无论是正重新开始还是初次创建)。 -但是,只会在活动从停止状态继续时调用 {@link -android.app.Activity#onRestart()} 方法,因此您可以使用它执行只有在活动之前停止但未销毁的情况下可能必须执行的特殊恢复工作。 +但是,只会在Activity从停止状态继续时调用 {@link +android.app.Activity#onRestart()} 方法,因此您可以使用它执行只有在Activity之前停止但未销毁的情况下可能必须执行的特殊恢复工作。
-应用需要使用 {@link android.app.Activity#onRestart()} 恢复活动状态的情况并不常见,因此没有适用于一般应用群体的任何方法指导原则。 +
应用需要使用 {@link android.app.Activity#onRestart()} 恢复Activity状态的情况并不常见,因此没有适用于一般应用群体的任何方法指导原则。 但是,因为您的 {@link android.app.Activity#onStop()} -方法应基本清理所有活动的资源,您将需要在活动重新开始时重新实例化它们。 -但是,您还需要在您的活动初次创建时重新实例化它们(没有活动的现有实例)。 +方法应基本清理所有Activity的资源,您将需要在Activity重新开始时重新实例化它们。 +但是,您还需要在您的Activity初次创建时重新实例化它们(没有Activity的现有实例)。 出于此原因,您应经常使用 {@link android.app.Activity#onStart()} 回调方法作为 - {@link android.app.Activity#onStop()} 方法的对应部分,因为系统会在它创建您的活动以及从停止状态重新开始活动时调用 {@link + {@link android.app.Activity#onStop()} 方法的对应部分,因为系统会在它创建您的Activity以及从停止状态重新开始Activity时调用 {@link android.app.Activity#onStart()} 。
@@ -177,7 +177,7 @@ protected void onRestart() { -当系统销毁您的活动时,它会调用您的 {@link android.app.Activity} 的 {@link android.app.Activity#onDestroy()} +
当系统销毁您的Activity时,它会调用您的 {@link android.app.Activity} 的 {@link android.app.Activity#onDestroy()}
方法。因为您通常应已使用 {@link android.app.Activity#onStop()} 释放大多数您的资源,到您接收对 {@link
android.app.Activity#onDestroy()} 的调用时,大多数应用无需做太多操作。
此方法是您清理可导致内存泄露的资源的最后一种方法,因此您应确保其他线程被销毁且其他长期运行的操作(比如方法跟踪)也会停止。
diff --git a/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd b/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd
index 7a9d462..c10ece8 100644
--- a/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd
+++ b/docs/html-intl/intl/zh-cn/training/basics/data-storage/shared-preferences.jd
@@ -52,9 +52,9 @@ android.preference.Preference} API 的信息,请参阅
- 或者,如果您只需活动的一个共享首选项文件,您可以使用
+ 或者,如果您只需Activity的一个共享首选项文件,您可以使用
{@link android.app.Activity#getPreferences(int) getPreferences()} 方法: 前两课重点讲述一方面:从您的应用开始另一个应用的活动。但如果您的应用可以执行对另一个应用可能有用的操作,您的应用应准备好响应来自其他应用的操作请求。
+ 前两课重点讲述一方面:从您的应用开始另一个应用的Activity。但如果您的应用可以执行对另一个应用可能有用的操作,您的应用应准备好响应来自其他应用的操作请求。
例如,如果您构建一款可与用户的好友分享消息或照片的社交应用,您最关注的是支持 {@link android.content.Intent#ACTION_SEND} 意向以便用户可以从另一应用发起
“共享”操作并且启动您的应用执行该操作。
要允许其他应用开始您的活动,您需要 {@code <intent-filter>}
+ 要允许其他应用开始您的Activity,您需要 {@code <intent-filter>}
在相应元素的宣示说明文件中添加一个 {@code <activity>} 元素。 当您的应用安装在设备上时,系统会识别您的意向过滤器并添加信息至所有已安装应用支持的意向内部目录。当应用通过隐含意向调用 {@link android.app.Activity#startActivity
-startActivity()} 或 {@link android.app.Activity#startActivityForResult startActivityForResult()} 时,系统会找到可以响应该意向的活动。
+startActivity()} 或 {@link android.app.Activity#startActivityForResult startActivityForResult()} 时,系统会找到可以响应该意向的Activity。
@@ -45,11 +45,11 @@ startActivity()} 或 {@link android.app.Activity#startActivityForResult startAct
为了正确定义您的活动可处理的意向,您添加的每个意向过滤器在操作类型和活动接受的数据方面应尽可能具体。
+ 为了正确定义您的Activity可处理的意向,您添加的每个意向过滤器在操作类型和Activity接受的数据方面应尽可能具体。
如果活动具有满足以下 {@link android.content.Intent} 对象条件的意向过滤器,系统可能向活动发送给定的 {@link android.content.Intent}:
+ 如果Activity具有满足以下 {@link android.content.Intent} 对象条件的意向过滤器,系统可能向Activity发送给定的 {@link android.content.Intent}:
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
index 45ce35a..4bcbdf9 100644
--- a/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
@@ -1,4 +1,4 @@
-page.title=允许其他应用开始您的活动
+page.title=允许其他应用开始您的Activity
page.tags=意向
helpoutsWidget=true
@@ -12,7 +12,7 @@ trainingnavtop=true
本课程将向您展示如何
@@ -24,18 +24,18 @@ trainingnavtop=true
-添加意向过滤器
-
@@ -67,12 +67,12 @@ startActivity()} 或 {@link android.app.Activity#startActivityForResult startAct
注意:如果您无需声明关于数据的具体信息 -{@link android.net.Uri}(比如,您的活动处理其他类型的“额外”数据而不是 URI 的时间),您应只指定 {@code android:mimeType} 属性声明您的活动处理的数据类型,比如 {@code text/plain} 或 {@code image/jpeg}。 +{@link android.net.Uri}(比如,您的Activity处理其他类型的“额外”数据而不是 URI 的时间),您应只指定 {@code android:mimeType} 属性声明您的Activity处理的数据类型,比如 {@code text/plain} 或 {@code image/jpeg}。
在您的意向过滤器中,您可以通过声明嵌套在 {@code <intent-filter>} -元素中的具有相应 XML 元素的各项,来声明您的活动接受的条件。 +元素中的具有相应 XML 元素的各项,来声明您的Activity接受的条件。
例如,此处有一个在数据类型为文本或图像时处理 {@link @@ -110,7 +110,7 @@ android.content.Intent#ACTION_SEND} 意向的意向过滤器:
-比如,假定您的活动同时处理 {@link +
比如,假定您的Activity同时处理 {@link android.content.Intent#ACTION_SEND} 和 {@link android.content.Intent#ACTION_SENDTO} 意向的文本和图像。在这种情况下,您必须为两个操作定义两种不同的意向过滤器,因为 {@link android.content.Intent#ACTION_SENDTO} 意向必须使用数据 {@link android.net.Uri} 指定使用 {@code send} 或 {@code sendto} URI 架构的收件人地址。 @@ -140,20 +140,20 @@ android.content.Intent#ACTION_SENDTO} 意向必须使用数据 {@link android.ne {@link android.content.Intent#CATEGORY_DEFAULT} 类别。方法 {@link android.app.Activity#startActivity startActivity()} 和 {@link android.app.Activity#startActivityForResult startActivityForResult()} 就像声明 {@link android.content.Intent#CATEGORY_DEFAULT} 类别那样处理所有意向。 -如果您不在意向过滤器中声明它,则没有隐含意向分解为您的活动。 +如果您不在意向过滤器中声明它,则没有隐含意向分解为您的Activity。
如需了解有关发送和接收 {@link android.content.Intent#ACTION_SEND} 执行社交共享行为的意向的详细信息,请参阅有关从其他应用接收简单数据的课程。
-为了决定在您的活动执行哪种操作,您可读取用于开始活动的 {@link +
为了决定在您的Activity执行哪种操作,您可读取用于开始Activity的 {@link android.content.Intent}。
-当您的活动开始时,调用 {@link android.app.Activity#getIntent()} 检索开始活动的 -{@link android.content.Intent}。您可以在活动生命周期的任何时间执行此操作,但您通常应在早期回调时(比如, +
当您的Activity开始时,调用 {@link android.app.Activity#getIntent()} 检索开始Activity的 +{@link android.content.Intent}。您可以在Activity生命周期的任何时间执行此操作,但您通常应在早期回调时(比如, {@link android.app.Activity#onCreate onCreate()} 或 {@link android.app.Activity#onStart()})执行。
@@ -182,9 +182,9 @@ protected void onCreate(Bundle savedInstanceState) {如果您想要向调用您的活动的活动返回结果,只需调用 {@link +
如果您想要向调用您的Activity的Activity返回结果,只需调用 {@link android.app.Activity#setResult(int,Intent) setResult()} 指定结果代码和结果 {@link -android.content.Intent}。当您的操作完成且用户应返回原始活动时,调用 {@link android.app.Activity#finish()} 关闭(和销毁)您的活动。 +android.content.Intent}。当您的操作完成且用户应返回原始Activity时,调用 {@link android.app.Activity#finish()} 关闭(和销毁)您的Activity。 例如:
@@ -200,7 +200,7 @@ android.app.Activity#RESULT_OK} 或 {@link android.app.Activity#RESULT_CANCELED} {@link android.content.Intent} 提供额外的数据。注意:结果默认设置为 {@link -android.app.Activity#RESULT_CANCELED}。因此,如果用户在完成操作动作或设置结果之前按了返回按钮,原始活动会收到“已取消”的结果。 +android.app.Activity#RESULT_CANCELED}。因此,如果用户在完成操作动作或设置结果之前按了返回按钮,原始Activity会收到“已取消”的结果。
@@ -215,16 +215,16 @@ finish();在这种情况下,只有几个可能的结果,因此结果代码是一个本地定义的整数(大于 0)。 -当您向自己应用中的活动返回结果时,这将非常有效,因为接收结果的活动可引用公共常数来确定结果代码的值。 +当您向自己应用中的Activity返回结果时,这将非常有效,因为接收结果的Activity可引用公共常数来确定结果代码的值。
-注意:无需检查您的活动是使用 +
注意:无需检查您的Activity是使用 {@link android.app.Activity#startActivity startActivity()} 还是 {@link -android.app.Activity#startActivityForResult startActivityForResult()} 开始的。如果开始您的活动的意向可能需要结果,只需调用 {@link +android.app.Activity#startActivityForResult startActivityForResult()} 开始的。如果开始您的Activity的意向可能需要结果,只需调用 {@link android.app.Activity#setResult(int,Intent) setResult()}。 -如果原始活动已调用 {@link +如果原始Activity已调用 {@link android.app.Activity#startActivityForResult startActivityForResult()},则系统将向其传递您提供给 {@link android.app.Activity#setResult(int,Intent) setResult()} 的结果;否则,会忽略结果。
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd index c261939..3c27581 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/intents/index.jd @@ -1,5 +1,5 @@ page.title=与其他应用交互 -page.tags=意向、活动 +page.tags=意向、Activity helpoutsWidget=true trainingnavtop=true @@ -12,7 +12,7 @@ startpage=trueAndroid 应用一般具有若干个活动。每个活动显示一个用户界面,用户可通过该界面执行特定任务(比如,查看地图或拍照)。要将用户从一个活动转至另一活动,您的应用必须使用 {@link +
Android 应用一般具有若干个Activity。每个Activity显示一个用户界面,用户可通过该界面执行特定任务(比如,查看地图或拍照)。要将用户从一个Activity转至另一Activity,您的应用必须使用 {@link android.content.Intent} 定义您的应用做某事的“意向”。 当您使用诸如 {@link android.app.Activity#startActivity startActivity()} 的方法将 {@link android.content.Intent} 传递至系统时,系统会使用 {@link -android.content.Intent} 识别和启动相应的应用组件。使用意向甚至可以让您的应用开始另一个应用中包含的活动。 +android.content.Intent} 识别和启动相应的应用组件。使用意向甚至可以让您的应用开始另一个应用中包含的Activity。
{@link android.content.Intent} 可以为 显式 以便启动特定组件(特定的 {@link android.app.Activity} 实例)或隐式 以便启动处理意向操作(比如“拍摄照片”)的任何组件。 @@ -53,10 +53,10 @@ android.content.Intent} 识别和启动相应的应用组件。使用意向甚
开始并不一定是单向的另一个活动。您还可以开始另一个活动并 +
开始并不一定是单向的另一个Activity。您还可以开始另一个Activity并 接收返回的结果。要接收结果,请调用 {@link android.app.Activity#startActivityForResult startActivityForResult()}(而不是 {@link android.app.Activity#startActivity startActivity()})。
@@ -33,19 +33,19 @@ startActivity()})。 -当然,响应的活动必须设计为返回结果。当它这样做时,它会作为另一 - {@link android.content.Intent} 对象发送结果。您的活动在 +
当然,响应的Activity必须设计为返回结果。当它这样做时,它会作为另一 + {@link android.content.Intent} 对象发送结果。您的Activity在 {@link android.app.Activity#onActivityResult onActivityResult()} 回调中接收它。
注意:当您调用 -{@link android.app.Activity#startActivityForResult startActivityForResult()} 时,您可以使用明确或隐含意向。当开始您自己的活动以接收结果时,您应使用明确意向确保您可收到预期结果。 +{@link android.app.Activity#startActivityForResult startActivityForResult()} 时,您可以使用明确或隐含意向。当开始您自己的Activity以接收结果时,您应使用明确意向确保您可收到预期结果。
-开始针对结果的活动时,您所使用的 {@link android.content.Intent} 对象并没有什么特别之处,但您需要向 {@link +
开始针对结果的Activity时,您所使用的 {@link android.content.Intent} 对象并没有什么特别之处,但您需要向 {@link android.app.Activity#startActivityForResult startActivityForResult()} 方法传递额外的整数参数。
@@ -53,7 +53,7 @@ android.app.Activity#startActivityForResult startActivityForResult()} 方法传 -例如,此处显示如何开始允许用户选择联系人的活动:
+例如,此处显示如何开始允许用户选择联系人的Activity:
static final int PICK_CONTACT_REQUEST = 1; // The request code @@ -68,14 +68,14 @@ private void pickContact() {接收结果
-当用户完成后续活动并且返回时,系统会调用您的活动 +
当用户完成后续Activity并且返回时,系统会调用您的Activity {@link android.app.Activity#onActivityResult onActivityResult()} 的方法。此方法包括三个参数:
为了成功处理结果,您必须了解结果的 -{@link android.content.Intent} 的格式。当返回结果的活动是您自己的活动之一时,这便非常容易。 +{@link android.content.Intent} 的格式。当返回结果的Activity是您自己的Activity之一时,这便非常容易。 Andriod 平台附带的应用提供它们自己的 API,您可用这些 API 获取特定结果数据。 例如,“联系人” 应用(在一些较旧的版本中是 Contacts 应用)始终返回带内容 URI(识别所选联系人)的结果,并且“照相机” 应用在 {@code "data"} 额外项中返回 {@link android.graphics.Bitmap}(请参阅有关 拍摄照片的课程)。 diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd index 22ebfce..f5b9c47 100644 --- a/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd +++ b/docs/html-intl/intl/zh-cn/training/basics/intents/sending.jd @@ -14,7 +14,7 @@ trainingnavtop=true
@@ -27,19 +27,19 @@ trainingnavtop=trueAndroid 最重要的功能之一是应用能够基于它要执行的“操作”向另一个应用发送用户。 -例如,如果您的应用有您要在地图上显示的公司地址,您无需在显示地图的应用中构建活动。 +例如,如果您的应用有您要在地图上显示的公司地址,您无需在显示地图的应用中构建Activity。 而是可以创建使用 {@link android.content.Intent} 查看地址的请求。Android 系统之后启动可以在地图上显示该地址的应用。
-正如第一堂课构建您的第一个应用中所讲述的,您必须使用意向在自己应用中的活动之间进行导航。您通常使用明确意向执行此操作,该意向定义您希望启动的组件的确切类名称。 +
正如第一堂课构建您的第一个应用中所讲述的,您必须使用意向在自己应用中的Activity之间进行导航。您通常使用明确意向执行此操作,该意向定义您希望启动的组件的确切类名称。 但是,当您希望另一应用执行操作时,比如“查看地图”,您必须使用隐含意向。
-本课程向您展示如何针对特定操作创建隐含意向,以及如何使用该意向开始在另一个应用中执行操作的活动。 +
本课程向您展示如何针对特定操作创建隐含意向,以及如何使用该意向开始在另一个应用中执行操作的Activity。
@@ -96,7 +96,7 @@ android.content.Intent#putExtra(String,String) putExtra()} 方法添加一条或默认情况下,系统基于所包含的 {@link android.net.Uri} 数据确定意向需要的相应 MIME 类型。如果您未在意向中包含 {@link android.net.Uri},您通常应使用 {@link android.content.Intent#setType setType()} 指定与意向关联的数据的类型。 -设置 MIME 类型可进一步指定哪些类型的活动应接收意向。 +设置 MIME 类型可进一步指定哪些类型的Activity应接收意向。
此处有更多添加额外数据以指定所需操作的意向:
@@ -146,8 +146,8 @@ android.content.Intent} 非常重要。例如,如果您想要使用 {@link and注意:如果您调用了意向,但设备上没有可用于处理意向的应用,您的应用将崩溃。
-要确认是否存在可响应意向的可用活动,请调用 {@link -android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} 来获取能够处理您的{@link android.content.Intent} 的活动列表。 +
要确认是否存在可响应意向的可用Activity,请调用 {@link +android.content.pm.PackageManager#queryIntentActivities queryIntentActivities()} 来获取能够处理您的{@link android.content.Intent} 的Activity列表。 如果返回的 {@link java.util.List} 不为空,您可以安全地使用该意向。例如:
@@ -161,14 +161,14 @@ boolean isIntentSafe = activities.size() > 0;如果 isIntentSafe
是 true
,则至少有一个应用将响应该意向。
如果它是 false
,则没有任何应用处理该意向。
注意:在您需要在用户尝试使用它之前禁用使用该意向的功能时,您应在活动初次开始时执行此检查。 +
注意:在您需要在用户尝试使用它之前禁用使用该意向的功能时,您应在Activity初次开始时执行此检查。 如果您了解可处理意向的特定应用,您还可以为用户提供下载该应用的链接(请参阅如何在 Google Play 链接到您的产品)。
-一旦您已创建您的 {@link android.content.Intent} 并设置附加信息,调用 {@link -android.app.Activity#startActivity startActivity()} 将其发送给系统 。如果系统识别可处理意向的多个活动,它会为用户显示对话框供其选择要使用的应用,如图 1 所示。 +android.app.Activity#startActivity startActivity()} 将其发送给系统 。如果系统识别可处理意向的多个Activity,它会为用户显示对话框供其选择要使用的应用,如图 1 所示。 -如果只有一个活动处理意向,系统会立即开始这个活动。 +如果只有一个Activity处理意向,系统会立即开始这个Activity。
@@ -215,7 +215,7 @@ if (isIntentSafe) {注意,当您通过将您的 {@link android.content.Intent} 传递至 {@link -android.app.Activity#startActivity startActivity()} 而开始活动时,有多个应用响应意向,用户可以选择默认使用哪个应用(通过选中对话框底部的复选框;见图 1)。 +android.app.Activity#startActivity startActivity()} 而开始Activity时,有多个应用响应意向,用户可以选择默认使用哪个应用(通过选中对话框底部的复选框;见图 1)。 当执行用户通常希望每次使用相同应用进行的操作时,比如当打开网页(用户可能只使用一个网页浏览器)或拍照(用户可能习惯使用一个照相机)时,这非常有用。 -- cgit v1.1