【核心组件】【Activity】1、简介

活动简介

Activity班是一个Android应用程序的重要组成部分,和活动方式推出,并放在一起是该平台的应用模式的基本组成部分。与使用main()方法启动应用程序的编程范例不同,Android系统Activity通过调用与其生命周期的特定阶段相对应的特定回调方法来启动实例中的代码。

本文档介绍了活动的概念,然后提供了有关如何使用它们的一些轻量级指导。有关构建应用程序的最佳实践的其他信息,请参阅 应用程序体系结构指南

活动的概念

移动应用体验与桌面版本不同,因为用户与应用的互动并不总是在同一个地方开始。相反,用户旅程通常是非确定性的。例如,如果您从主屏幕打开电子邮件应用程序,则可能会看到电子邮件列表。相比之下,如果您使用社交媒体应用程序然后启动您的电子邮件应用程序,您可能会直接进入电子邮件应用程序的屏幕撰写电子邮件。

Activity课程旨在促进这种范式。当一个应用程序调用另一个应用程序时,调用应用程序将调用另一个应用程序中的活动,而不是作为原子整体的应用程序。通过这种方式,活动可以作为应用与用户交互的入口点。您将活动实现为类的子Activity类。

活动提供应用程序绘制其UI的窗口。此窗口通常填充屏幕,但可能小于屏幕并浮动在其他窗口的顶部。通常,一个活动在应用程序中实现一个屏幕。例如,应用程序的某个活动可能会实现“首选项”屏幕,而另一个活动会实现“ 选择照片”屏幕。

大多数应用程序包含多个屏幕,这意味着它们包含多个活动 通常,应用程序中的一个活动被指定为主要活动,这是用户启动应用程序时显示的第一个屏幕。然后,每个活动可以启动另一个活动以执行不同的操作。例如,简单电子邮件应用程序中的主要活动可能会提供显示电子邮件收件箱的屏幕。从那里开始,主要活动可能会启动其他活动,为编写电子邮件和打开个人电子邮件等任务提供屏幕。

虽然活动协同工作以在应用程序中形成一个有凝聚力的用户体验,但每个活动仅与其他活动松散地绑定; 应用程序中的活动通常存在最小的依赖关系。实际上,活动通常会启动属于其他应用程序的活动。例如,浏览器应用可能会启动社交媒体应用的共享活动。

要在应用程序中使用活动,您必须在应用程序的清单中注册有关它们的信息,并且必须适当地管理活动生命周期。本文档的其余部分介绍了这些主题。

配置清单

为了使您的应用能够使用活动,您必须在清单中声明活动及其某些属性。

宣布活动

要声明您的活动,请打开清单文件并添加 <activity> 元素作为<application> 元素的子 元素。例如:

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

此元素唯一必需的属性是 android:name,它指定活动的类名。您还可以添加定义活动特征的属性,例如标签,图标或UI主题。有关这些和其他属性的更多信息,请参阅 <activity> 元素参考文档。

注意:发布应用程序后,不应更改活动名称。如果这样做,您可能会破坏某些功能,例如应用程序快捷方式。有关发布后要避免的更改的详细信息,请参阅 无法更改的内容

声明意图过滤器

Intent过滤器 是Android平台的一个非常强大的功能。它们不仅可以基于显式请求而且还可以基于请求来启动活动 。例如,显式请求可能会告诉系统“在Gmail应用中启动发送电子邮件活动”。相反,隐式请求会告诉系统“在任何可以执行此任务的活动中启动发送电子邮件屏幕”。当系统UI询问用户在执行任务时使用哪个应用程序时,这是一个工作中的意图过滤器。

您可以通过 在 <activity>元素中声明<intent-filter>属性来利用此功能 。该元素的定义包括 <action>元素,以及可选的 <category> 元素和/或<data> 元素。这些元素组合在一起以指定您的活动可以响应的意图类型。例如,以下代码段显示了如何配置发送文本数据的活动,并从其他活动接收请求以执行此操作:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

在此示例中,<action> 元素指定此活动发送数据。将<category> 元素声明为DEFAULT使活动能够接收启动请求。所述<数据> 元素指定该活动可以发送的数据的类型。以下代码段显示了如何调用上述活动:

//COTLIN
val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)
 
//JAVA

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);

如果您打算让自己的应用程序自包含且不允许其他应用程序激活其活动,则不需要任何其他意图过滤器。您不希望其他应用程序可用的活动应该没有intent过滤器,您可以使用显式意图自行启动它们。有关活动如何响应意图的更多信息,请参阅意图和意图过滤器

声明权限

您可以使用清单 标记来控制哪些应用可以启动特定活动。除非两个活动在其清单中具有相同的权限,否则父活动无法启动子活动。如果 为特定活动声明 元素,则调用活动必须具有匹配 元素。 <activity> <uses-permission><uses-permission>

例如,如果您的应用想要使用名为SocialApp的假想应用在社交媒体上分享帖子,SocialApp本身必须定义调用它的应用必须具有的权限:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

然后,要允许调用SocialApp,您的应用必须与SocialApp清单中设置的权限相匹配:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

有关权限和安全性的更多信息,请参阅 安全性和权限

管理活动生命周期

在其一生中,一项活动经历了许多州。您使用一系列回调来处理状态之间的转换。以下部分介绍了这些回调。

的onCreate()

您必须实现此回调,该回调在系统创建活动时触发。您的实现应初始化活动的基本组件:例如,您的应用程序应创建视图并将数据绑定到列表。最重要的是,您必须在此处调用 setContentView() 以定义活动用户界面的布局。

onCreate()完成后,接下来的回调是永远onStart()

在onStart()

作为onCreate()退出时,活动进入开始状态,并且活性变得对用户可见。此回调包含活动最终准备到达前台并变为交互式的内容。

的onResume()

系统在活动开始与用户交互之前调用此回调。此时,活动位于活动堆栈的顶部,并捕获所有用户输入。应用程序的大部分核心功能都是在该onResume()方法中实现的。

onPause()回调始终遵循onResume()

的onPause()

onPause()当活动失去焦点并进入暂停状态时, 系统会调用。例如,当用户点击“后退”或“最近”按钮时,会出现此状态。当系统调用 onPause()您的活动时,从技术上讲,您的活动仍然部分可见,但通常表示用户正在离开活动,并且活动很快将进入“已停止”或“已恢复”状态。

如果用户期望UI更新,则处于暂停状态的活动可以继续更新UI。这种活动的示例包括示出导航地图屏幕或媒体播放器播放的活动。即使这些活动失去焦点,用户也希望他们的UI继续更新。

你应该使用 onPause()保存应用程序或用户数据,进行网络通话,或执行数据库事务。有关保存数据的信息,请参阅 保存和恢复活动状态

一旦onPause()完成执行,下一个回调是onStop()或 onResume(),取决于活动进入暂停状态后发生的情况。

的onStop()

onStop()当活动不再对用户可见时, 系统会调用。这可能是因为活动正在被破坏,新活动正在开始,或者现有活动正在进入恢复状态并且正在覆盖已停止的活动。在所有这些情况下,停止的活动根本不再可见。

系统调用的下一个回调是 onRestart(),如果活动返回与用户交互,或者 onDestroy() 此活动是否完全终止。

onRestart()

当处于“已停止”状态的活动即将重新启动时,系统将调用此回调。onRestart() 从停止时恢复活动状态。

此回调始终紧随其后 onStart()

的onDestroy()

系统在销毁活动之前调用此回调。

此回调是活动收到的最后一个回调。 onDestroy()通常实现以确保在活动或包含它的进程被销毁时释放所有活动的资源。

本节仅提供对此主题的介绍。有关活动生命周期及其回调的更详细处理,请参阅活动生命周期

此页面上的内容和代码示例受内容许可证中描述的许可证的约束。Java是Oracle和/或其附属公司的注册商标。

上次更新日期:2019年1月23日

猜你喜欢

转载自blog.csdn.net/wxtyd/article/details/86685505
今日推荐