https://developer.android.google.cn/guide/components/activities/intro-activities.html#java --翻译水平有限,欢迎指正

Activity类是Android应用程序的一个关键组件,activities启动和之间的组合是平台应用模型的一个基本部分。和应用程序通过main()方法启动的编程范式不同,Android系统通过调用对应于activity生命周期的特定阶段的特定回调方法来启动activity实例中的代码。

这个文档介绍了Activity的概念,然后提供了一些关于如何使用它们的轻量级指导。

activities概念


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

Activity类的设计目的是为了实现这个模式。当一个应用程序调用另一个应用程序时,调用应用程序会调用另一个应用程序中的某个activity,而不是作为一个原子整体来调用应用程序。这样,activity就成为应用程序与用户交互的入口点。实现activity类的子类来获得activity。

activity提供了应用程序绘制UI的窗口。这个窗口通常会填充屏幕,但可能比屏幕小,并在其他窗口上浮动。通常,一个activity在应用程序中实现一个屏幕,例如,一个应用程序的一个activity可能实现一个偏好屏幕,而另一个activity实现一个选择的照片屏幕。

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

虽然activity可以在应用程序中形成聚合的用户体验,但每个activity都只是松散地绑定到其他activity;在应用程序中,activity之间的依赖性通常是最小的,实际上,activity通常会启动属于其他应用程序的activity。例如,一个浏览器应用程序可能启动社交媒体应用程序的共享activity。

要在应用程序中使用activity,必须在应用程序的manifest中注册信息,并且必须适当地管理activity的生命周期。本文的其余部分将介绍这些主题。

配置manifest


声明activities

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

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

这个元素唯一需要的属性是android:name,它指定activity的类名。您还可以添加定义activity特性的属性,如标签、图标或UI主题。

发布应用程序后,不应该更改activity名称。如果这样做,可能会破坏一些功能,比如应用程序快捷键

声明intent filters

intent filters是Android平台的一个非常强大的特性。它们提供了基于明确的请求和隐式请求启动activity的能力。例如,一个明确的请求可能会告诉系统“在Gmail应用程序中启动发送邮件activity”。相比之下,当系统UI询问用户在执行任务时使用哪个应用程序时,隐式请求告诉系统“在任何可以完成任务的activity中启动发送电子邮件屏幕”。这就是intent filters在起作用。

通过在 <activity>元素中声明 <intent-filter>属性,您可以利用这个特性。该元素的定义包括<action>元素和,可选地一个<category> 元素和/或 <data> 元素。这些元素结合在一起,指定您的activity可以响应的intent类型。例如,下面的代码片段展示了如何配置发送文本数据的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能够接收启动请求。<data>元素指定此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,你不需要任何其他 intent filters。您不希望向其他应用程序提供的activity应该没有intent filters,您可以使用明确的 intents来启动它们。

声明permissions(权限)

您可以使用manifest的 <activity>标记来控制哪些应用程序可以启动特定的activity。除非两个activity在其manifest中具有相同的权限,否则父activity不能启动子activity。如果您为特定的activity声明一个 <uses-permission> 元素,那么调用activity必须有一个匹配的 <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声明周期中,一个activity要经过若干状态。您使用一系列回调来处理状态间的转换。下面的部分将介绍这些回调。

onCreate()

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

当onCreate()完成时,下一个回调总是onStart()。

 onStart()

当onCreate()退出时,activity进入Started状态,activity对用户可见。这个回调包含了activity用于进入前台并进行交互的最后准备工作。

onResume()

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

 onPause()回调始终跟随着onResume()。

onPause()

当activity失去焦点并进入Paused 状态时,系统调用onPause()。例如,当用户点击Back或Recents按钮时,就会出现这种状态。当系统为您的activity调用onPause()时,技术上意味着您的activity仍然部分可见,但大多数情况下是指用户将离开activity,activity将很快进入Stopped状态或Resumed状态。

如果用户期望UI更新, Paused 状态中的activity可能会继续更新UI。此类activity的示例包括显示导航地图屏幕或播放媒体播放器。即使这样的activity失去了焦点,用户也希望他们的UI能够继续更新。

您不应该使用onPause()来保存应用程序或用户数据、进行网络调用或执行数据库事务。

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

 onStop()

当activity不再对用户可见时,系统调用onStop()。这可能会发生,因为activity正在被销毁,一个新的activity正在启动,或者一个现有的activity正在进入一个 Resumed 状态,并且正在覆盖停止的activity。在所有这些情况下,停止的activity都不再可见。

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

 onRestart()

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

这个回调总是紧接着onStart()。

onDestroy()

系统在activity被销毁之前调用这个回调。

这个回调是activity接收到的最后一个回调。onDestroy()通常用以确保当activity或包含该activity的进程被销毁时,所有activity的资源都被释放。

转载于:https://www.cnblogs.com/tysdeblog/p/8567132.html

Activities介绍相关推荐

  1. excel插入行 uipath_Uipath中excel的activities用法介绍

    1.auto fill range – excel自动填充范围,如图:公式会自增,但数值没有 2.copy patse sheet,好像只能复制粘贴到同一个excel中 第一个是粘贴位置,第二个是粘贴 ...

  2. java类安卓app 简介_android.app.Activity 的介绍

    文章可随意转载,但务必注明源地址 发现当前Android的资料不是很多,而且对于Activity的介绍也很少,所以把官方文档的android.app.Activity的介绍翻译了一下,加入了一些自己的 ...

  3. Android四大基本组件介绍与生命周期

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  4. Android四大基本组件和生命周期的介绍

    Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity ...

  5. 计算机专业英语外文翻译,计算机专业英语JAVA介绍外文翻译[共28页]

    <计算机专业英语JAVA介绍外文翻译[共28页]>由会员分享,可在线阅读,更多相关<计算机专业英语JAVA介绍外文翻译[共28页](28页珍藏版)>请在读根文库上搜索. 1.荆 ...

  6. 关于android 1.6全部的权限介绍

    原文:关于android 1.6全部的权限介绍 我们在 AndroidManifest.xml里需要对一些软件需要的操作做一些权限的声明, 比如我们的软件有发送短信的功能,那么就需要在 Android ...

  7. bitter matlab,两分钟英语自我介绍模板

    英语的自我介绍自然不能太单调,你认为两分钟英语自我介绍怎么写好呢?快来参考一下两分钟英语自我介绍范文吧!下面就是小编给大家带来的两分钟英语自我介绍,希望能帮助到大家! 英语自我介绍范本 Good mo ...

  8. WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用

    从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示InArgument<T>参数的使用 目录 1     ...

  9. 传统企业建模原理及建模体系介绍

    传统企业建模方法是企业经营管理人员对企业的抽象及企业本身元素的具体概括和归纳,它的构造遵循一定行业.一定经营方式.一定建模分析方法,这种模板在同一类行业的企业建模过程中保留一定的参考.指导乃至直接应用 ...

  10. Intent Flag介绍 intent.addFlags()

    FLAG_ACTIVITY_CLEAR_TOP 如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有A ...

最新文章

  1. Gitee X Serverless Devs 邀你来“领赏”啦!
  2. LightOJ - 1222 Gift Packing(最大费用最大流/KM)
  3. Webpack实战(六):如何优雅地运用样式CSS预处理
  4. addEventListener方法与on事件的区别
  5. 2017年5月24日 HTML 基础知识(二)
  6. 获取指定存储过程的参数定义
  7. 把一个服务器的数据库导入到另一台服务器中
  8. php数组写杨辉三角java_用java实现杨辉三角的示例代码
  9. 关于推荐系统中的冷启动问题探讨(Approaching the Cold Start Problem in Recommender Systems)...
  10. centos5.5+NAT+Squid透明代理总结
  11. iOS 性能优化之内存优化
  12. 01 学习如鹏网的C语言免费课程
  13. 25、Java面向对象——抽象类和抽象方法、接口
  14. mysql如何获取今天的日期?
  15. oracle查看服务器的时间,Oracle如何获取系统当前时间等操作实例
  16. 从“零”开始的C语言
  17. 在VMware vCenter中使用企业CA或第三方CA替换VMCA
  18. 关于寝室熄灯问题调研的思考
  19. 淘宝数据库负责人介绍淘宝数据库设计
  20. VMware 安装 Windows11

热门文章

  1. 编程中常见的各种符号英文名字
  2. Django 数据迁移导入导出
  3. 防火墙iptables和firewall相关操作
  4. 2022年电工(初级)考试试题及答案
  5. ipsec 加密流程(一):ipsec策略匹配
  6. mysql中生成时间维度表
  7. 解释外显子,内含子,CDS、cDNA、EST、mRNA、ORF间的区别
  8. 苹果手机换电池对手机有影响吗_你知道你的手机电池多久换一次吗?
  9. 我是一个大器晚成的投资人
  10. ios7 未能连接到服务器,完美解决iTunes 未能连接到此 iPhone。发生未知错误(0xe8000003)和0xe8000084...