【Android必备】Activity概要介绍(1)

概要


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

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

Activity的概念


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

该Activity课程旨在促进这种范例。当一个应用程序调用另一个应用程序时,调用应用程序在另一个应用程序中调用一个activity,而不是作为原子整体的应用程序。这样,该activity就成为应用程序与用户交互的入口点。您将一个activity作为Activity该类的一个子类来实现。

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

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

尽管activity共同协作以在应用中形成一致的用户体验,但每项activity只与其他activity松散地绑定在一起; 通常应用程序中的activity之间的依赖性最小。事实上,activity经常启动属于其他应用程序的activity。例如,浏览器应用程序可能会启动社交媒体应用程序的共享activity。

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

配置清单


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

宣布activities

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

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

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

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

声明 intent filters

意图过滤器 是Android平台的一个非常强大的功能。他们提供的能力不仅基于 明确的请求而且也是隐式的。例如,一个明确的请求可能会告诉系统“在Gmail应用程序中启动发送电子邮件”activity。相比之下,隐式请求会告诉系统在任何可以完成这项工作的activity中启动“发送电子邮件”屏幕。当系统UI询问用户执行任务时使用哪个应用程序时,这是工作中的意图过滤器。

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

<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> 元素指定这个activity发送数据。声明<category> 元素DEFAULT使activity能够接收启动请求。所述<数据> 元素指定该activity可以发送的数据的类型。以下代码片段显示了如何调用上述activity:

// 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);

如果您希望自己的应用是独立的,并且不允许其他应用激活其activity,则不需要任何其他意图过滤器。您不希望提供给其他应用程序的activity应该没有意图过滤器,您可以使用明确的意图自行启动它们。有关您的activity如何响应意图的更多信息,请参阅意向和意图过滤器【原】

声明权限

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

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

管理activity生命周期


在整个生命周期中,一个activity会经历许多州。您使用一系列回调来处理状态之间的转换。以下各节介绍这些回调。

onCreate()

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

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

onStart()

作为onCreate()退出,activity进入开始状态,activity对用户可见。这个回调包含了什么等于该activity进入前台并成为互动的最后准备。

onResume()

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

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

onPause()

onPause()当activity失去焦点并进入暂停状态时, 系统会调用。例如,当用户点击“返回”或“最近”按钮时,会发生此状态。当系统调用 onPause()您的activity时,它在技术上意味着您的activity仍然部分可见,但通常表示用户正在离开activity,并且activity很快会进入已停止或已恢复状态。

如果用户希望更新UI,处于暂停状态的activity可能会继续更新UI。这种activity的例子包括显示导航地图屏幕或媒体播放器播放的activity。即使这样的activity失去了重点,用户希望他们的用户界面继续更新。

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

一旦onPause()执行完成,下一个回调就是onStop()或者 onResume(),取决于activity进入暂停状态后发生了什么。

onStop()

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

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

onRestart()

当处于停止状态的activity即将重新启动时,系统会调用此回调。onRestart() 恢复activity从停止状态开始的状态。

这个回调总是跟着 onStart()。

onDestroy()

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

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

本节仅介绍该主题。有关activity生命周期及其回调的更详细的处理,请参阅activity生命周期【原】

Lastest Update:2018.04.17

Activity目录介绍

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Android必备】Activity概要介绍(1)

猜你喜欢

转载自blog.51cto.com/4789781/2122328