android应用开发(21)---Activity介绍

Activity介绍

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

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

Activity的概念

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

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

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

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

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

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

manifest配置清单

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

宣布activity

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

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

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

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

声明intent filters

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

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)
如果您希望自己的应用是独立的,并且不允许其他应用激活其活动,则不需要任何其他意图过滤器。您不希望提供给其他应用程序的活动应该没有意图过滤器,您可以使用明确的意图自行启动它们。有关您的活动如何响应意图的更多信息,请参阅意向和意图过滤器

声明权限

您可以使用清单的 标签来控制哪些应用可以启动特定的活动。除非两个活动在清单中具有相同的权限,否则父级活动无法启动子活动。如果您 为特定活动声明 元素,则调用活动必须具有匹配的 元素。 <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。这种活动的例子包括显示导航地图屏幕或媒体播放器播放的活动。即使这样的活动失去了重点,用户希望他们的用户界面继续更新。

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

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

onStop()

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

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

onRestart()

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

这个回调总是跟着 onStart()

onDestroy()

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值