Activity简介(活动一)

Activity类是Android应用程序的重要组成部分,活动的启动和组合方式是平台应用程序模型的基本组成部分。

一、活动的概念

  • 应用与用户交互的入口点。
  • 活动提供应用程序绘制其UI的窗口。
  • 每个活动可以启动另一个活动以执行不同的操作。
  • 活动通常会启动属于其他应用程序的活动。
  • 必须在应用程序的清单中注册有关它们的信息,并且必须适当地管理活动生命周期。

二、配置清单

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

1、声明活动

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

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

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

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

2、声明意图(Intent)过滤器(filter)

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

// 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>标记来控制哪些应用可以启动特定活动。 除非两个活动在其清单中具有相同的权限,否则父活动无法启动子活动。 如果为特定活动声明<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()退出时,活动进入Started状态,活动对用户可见。这个回调包含了活动最终准备到达前台并变得互动的内容。
  • onResume()
    系统在活动开始与用户交互之前调用此回调。此时,活动位于活动堆栈的顶部,并捕获所有用户输入。应用程序的大多数核心功能都是在onResume()方法中实现的。
    onPause()回调始终跟在on​​Resume()之后。
  • onPause()
    当活动失去焦点并进入暂停状态时,系统调用onPause()。例如,当用户点击“后退”或“最近”按钮时,会出现此状态。当系统为您的活动调用onPause()时,它在技术上意味着您的活动仍然部分可见,但大多数情况下表明用户正在离开活动,并且活动很快将进入“已停止”或“已恢复”状态。
    如果用户期望UI更新,则处于暂停状态的活动可以继续更新UI。这种活动的示例包括示出导航地图屏幕或媒体播放器播放的活动。即使这些活动失去焦点,用户也希望他们的UI继续更新。
    您不应使用onPause()来保存应用程序或用户数据,进行网络调用或执行数据库事务。有关保存数据的信息,请参阅保存和恢复活动状态。
    一旦onPause()完成执行,下一个回调就是onStop()或onResume(),具体取决于活动进入Paused状态后会发生什么。
  • onStop()
    当活动不再对用户可见时,系统调用onStop()。这可能是因为活动被破坏,新活动正在开始,或者现有活动正在进入恢复状态并且正在覆盖已停止的活动。在所有这些情况下,停止的活动根本不再可见。
    系统调用的下一个回调是onRestart(),如果活动返回与用户交互,或者如果此活动完全终止,则由onDestroy()调用。
  • onRestart()
    当处于“已停止”状态的活动即将重新启动时,系统将调用此回调。 onRestart()从停止时恢复活动的状态。
    此回调始终跟随onStart()。
  • onDestroy()
    系统在销毁活动之前调用此回调。
    此回调是活动收到的最后一个回调。通常实现onDestroy()以确保在活动或包含它的进程被销毁时释放所有活动的资源。
    本节仅提供对此主题的介绍。有关活动生命周期及其回调的更详细处理,请参阅活动生命周期。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • activity是 Android系统四大应用组件之一,其它三个为 Service(服务) 、BroadcastR...
    无若叶阅读 482评论 0 1
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w阅读 706评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,672评论 18 139
  • 都说条条道路通罗马。 还说罗马不是一天建成的。还听到伟大之城、永恒之城这些诸多对罗马的溢美之词。 到了罗马才知道人...
    车城漫笔阅读 2,122评论 4 8
  • 宝剑匣中隐,不做寻常声。 何日共侠客,争锋天下鸣。 黑首白发生,千山阻归程。 心事付皓月,皎皎无人听。
    沉默如me阅读 525评论 0 50