Activity(活动)概要介绍
前言
Activity类是Android应用程序的重要组成部分,活动的启动和组合方式是平台应用程序模型的基本组成部分。
Activity(活动)的概念
- 应用与用户交互的入口点。
- 活动提供应用程序绘制其UI的窗口。
- 每个活动可以启动另一个活动以执行不同的操作。
- 活动通常会启动属于其他应用程序的活动。
- 必须在应用程序的清单中注册有关它们的信息,并且必须适当地管理活动生命周期。
清单文件中配置Activity(活动)
为了使您的应用能够使用活动,您必须在清单中声明活动及其某些属性。
1.声明活动
要声明活动,需打开清单文件AndroidManifest.xml并添加元素作为元素的子元素。 例如:
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
此元素唯一必需的属性是android:name,它指定活动的类名。 您还可以添加定义活动特征的属性,例如标签,图标或UI主题。 有关这些和其他属性的更多信息,请参阅元素参考文档(待汇总)。
注意:发布应用程序后,不应更改活动名称。 如果这样做,您可能会破坏某些功能,例如应用程序快捷方式。 有关发布后要避免的更改的详细信息,请参阅无法更改的内容(待汇总)。
2.声明意图(Intent)过滤器(filter)
Intent过滤器是Android平台的一个非常强大的功能。 它们不仅可以基于显式请求而且还可以基于隐式请求来启动活动。 例如,显式请求可能会告诉系统“在Gmail应用中启动发送电子邮件活动”。相反,隐式请求会告诉系统“在任何可以执行此任务的活动中启动发送电子邮件屏幕”。 当系统UI询问用户在执行任务时使用哪个应用程序时,这是一个工作中的意图过滤器。
您可以通过在元素中声明属性来利用此功能。 该元素的定义包括元素,以及可选的元素和元素。 这些元素组合在一起以指定您的活动可以响应的意图类型。 例如,以下代码段显示了如何配置发送文本数据的活动,以及如何接收来自其他活动的请求:
<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>
在此示例中,元素指定此活动发送数据。 将元素声明为DEFAULT可使活动接收启动请求。 元素指定此活动可以发送的数据类型。 以下代码段显示了如何调用上述活动:
// 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过滤器,您可以使用显式意图自行启动这些活动。 有关活动如何响应意图的更多信息,请参阅意图和意图过滤器(待汇总)。
3.声明权限
您可以使用清单的 标签来控制哪些应用可以启动特定的activity。除非两个activity在清单中具有相同的权限,否则父级activity无法启动子activity。如果您 为特定activity声明 元素,则调用activity必须具有匹配的 元素。
例如,如果您的应用想要使用名为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整个生命周期中,一个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()
当处于onStop停止状态的activity即将重新启动时,系统会调用此回调。onRestart() 恢复activity从停止状态开始的状态。
这个回调总是跟着 onStart()。
onDestroy()
系统在activity销毁之前调用此回调。
此回调是activity收到的最后一个回调。 onDestroy()通常是为了确保在activity或包含它的进程被销毁时释放所有activity的资源。
参考内容
Activity简介(活动一)
【Android必备】Activity概要介绍(1)
Activity生命周期
了解活动生命周期(活动二)【待汇总】
处理活动状态更改(活动三)【待汇总】
理解任务和后台堆栈(活动四)【待汇总】
进程和应用程序生命周期(活动五)【待汇总】
Parcelables和Bundles(活动六)【待汇总】

本文介绍了Android中的Activity,它是应用与用户交互的主要组件。文章详细讲解了如何在清单文件中声明Activity、配置Intent过滤器和权限。此外,还阐述了Activity的生命周期,包括onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart()和onDestroy()等关键回调方法,以及它们在不同场景下的应用。"
121447079,7303234,RK3568平台蓝牙PBAP协议解析与通讯录同步,"['蓝牙开发', '嵌入式开发', '通讯协议', 'RK3568平台']
707

被折叠的 条评论
为什么被折叠?



