Activity的介绍
Activity类是Android应用程序的重要组成部分,activity的启动和组合方式是平台应用程序模型的基本组成部分。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生命周期。 本文档的其余部分介绍了这些科目。
配置清单
为了使您的应用能够使用activity,您必须在清单中声明activity及其某些属性。
声明activity
要声明您的activity,请打开清单文件并添加<activity>元素作为<application>元素的子元素。 例如:
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
此元素唯一必需的属性是android:name,它指定activity的类名。 您还可以添加定义activity特征的属性,例如标签,图标或UI主题。有关这些和其他属性的更多信息,请参阅<activity>元素参考文档。
注意:发布应用程序后,不应更改活动名activity。如果这样做,您可能会破坏某些功能,例如应用程序快捷方式。 有关发布后要避免的更改的详细信息,请参阅无法更改的内容。
声明Intent过滤器
Intent过滤器是Android平台的一个非常强大的功能。它们不仅可以基于显式请求而且还可以基于隐式请求来启动activity。 例如,显式请求可能会告诉系统“在Gmail应用中启动发送电子邮件activity”。相反,隐式请求会告诉系统“在任何可以执行此任务的activity中启动发送电子邮件屏幕”。
您可以通过在<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接收启动请求。 <data>元素指定此activity可以发送的数据类型。 以下代码段显示了如何调用上述activity:
KOTLIN
val sendIntent = Intent().apply {
action = Intent.ACTION_SEND
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)
JAVA
// 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过滤器。您不希望其他应用程序可用的activity应该没有intent过滤器,您可以使用显式意图自行启动它们。有关activity如何响应意图的更多信息,请参阅意图和意图过滤器。
声明权限
您可以使用清单的<activity>标记来控制哪些应用可以启动特定activity。除非两个活动在其清单中具有相同的权限,否则父activity无法启动子activity。 如果为特定activity声明<uses-permission>元素,则调用activity必须具有匹配的<uses-permission>元素。
例如,如果您的应用想要使用名为SocialApp的假想应用在社交媒体上分享帖子,SocialApp本身必须定义调用它的应用必须具有的权限:
<manifest> <activity android:name="...." android:permission=”com.google.socialapp.permission.SHARE_POST” />
然后,要允许调用社交应用,您的应用必须与社交应用清单中设置的权限相匹配:
<manifest> <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" /> </manifest>
有关权限和安全性的更多信息,请参阅安全性和权限。
管理activity声明周期
在其生命周期中,一项activity经历了许多状态。 您使用一系列回调来处理状态之间的转换。 以下部分介绍了这些回调。
onCreate()
您必须实现此回调,该回调在系统创建activity时触发。 您的实现应初始化activity的基本组件::例如,您的应用程序应创建视图并将数据绑定到列表。 最重要的是,您必须调用setContentView()来定义activity用户界面的布局。
当onCreate()完成时,下一个回调始终是onStart()。
onStart()
当onCreate()退出时,activity进入Started状态,activity对用户可见。此回调包含activity最终准备到达前台并变为交互式的内容。
onResume()
系统在activity开始与用户交互之前调用此回调。此时,activity位于活动堆栈的顶部,并捕获所有用户输入。 应用程序的大多数核心功能都是在onResume()方法中实现的。
onPause()回调总是跟在onResume()之后。
onPause()
当活动失去焦点并进入暂停状态时,系统调用onPause()。 例如,当用户点击“后退”或“最近”按钮时,会出现此状态。当系统为您的activity调用onPause()时,它在技术上意味着您的activity仍然部分可见,但通常表示用户正在离开activity,并且activity很快将进入“已停止”或“已恢复”状态。
如果用户期望UI更新,则处于暂停状态的活动可以继续更新UI。 这种activity的示例包括示出导航地图屏幕或媒体播放器播放的activity。即使这些activity失去焦点,用户也希望他们的UI继续更新。
您不应使用onPause()来保存应用程序或用户数据,进行网络调用或执行数据库事务。 有关保存数据的信息,请参阅保存和恢复活动状态。
一旦onPause()完成执行,下一个回调就是onStop()或onResume(),具体取决于activity进入Paused状态后发生的情况。
onStop()
当activity不再对用户可见时,系统调用onStop()。这可能是因为activity正在销毁,新activity正在开始,或者现有activity正在进入恢复状态并且正在覆盖已停止的activity。 在所有这些情况下,停止的activity根本不再可见。
系统调用的下一个回调是onstart(),如果activity返回与用户交互,或者如果此activity完全终止,则由onDestroy()调用。
onRestart()
当处于“已停止”状态的activity即将重新启动时,系统将调用此回调。 onRestart()从停止时恢复activity的状态。
这个回调总是后跟onStart()。
onDestrory()
系统在销毁activity之前调用此回调。通常实现onDestroy()以确保在activity或包含它的进程被销毁时释放所有activity的资源。
本节仅提供对此主题的介绍。 有关activity生命周期及其回调的更详细处理,请参阅activity生命周期。
Activity的介绍的更多相关文章
- android.app.Activity 的介绍
发现当前Android的资料不是非常多,并且对于Activity的介绍也非常少.所以把官方文档的android.app.Activity的介绍翻译了一下,增加了一些自己的理解.各位假设认为我自己理解的 ...
- MRDS学习三——机械车的改良(Activity的介绍)
Activity:VPL中化繁为简的工具,可以使得真个VPL容易让人看懂,也能跟好的控制.它就很像把一堆比较复杂但相关的流程组合成一个自定义的Activity. 完成Activity的定义: 第一步: ...
- 二、Android学习第二天——初识Activity(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
- android设置中的Preferencescreen使用方法介绍与分析
今天主要研究了一下设置中的Preferencescreen应用,它不仅可以作为设置界面显示,并且还可以启动activity,以下主要是对启动activity的介绍 1. Preferencescree ...
- appium GUI介绍
Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...
- Android学习整理之Activity篇
一.Activity概念介绍 activity属于android的四大组件之一(其他的三个: Content provider,Broadcast receiver,Service),它可以理解为一个 ...
- 如何获取启动页activity
启动页activity指App启动的第一个activity,介绍几种查看启动页activity的方法: 方法一:问开发,最有效的获取方式 方法二:dumpsys package 包名,前提是知道包名( ...
- Android四大组件全然解析(一)---Activity
本文參考\android\android\frameworks\base\core\java\android\app\Activity.java文件里的类凝视.以及android/frameworks ...
- Android基础新手教程——4.1.1 Activity初学乍练
Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...
随机推荐
- 放弃antd table,基于React手写一个虚拟滚动的表格
缘起 标题有点夸张,并不是完全放弃antd-table,毕竟在react的生态圈里,对国人来说,比较好用的PC端组件库,也就antd了.即便经历了2018年圣诞彩蛋事件,antd的使用者也不仅不减,反 ...
- linux 下的OpenGL的安装配置
https://blog.csdn.net/qq_38228254/article/details/78521155 本人亲测有效
- 用一句sql语句更新两个表并可更新对应的字段的值
ACCESS 例子: insert into products (ProNumber,CASNumber,Cnname,Price,Enname,Baozhuang,Pinpai) select Pr ...
- Delphi下MSMQ(Mircosoft Message Queue)实例(私有队列)
网上关于消息队列技术原理说明的详细文档很多,但涉及到Delphi的具体实现很少,这是我从网上找了一上午的资料,自己整合和尝试的能运行的程序. 打开控制面板->程序->添加组件,添加消息队列 ...
- Winform 图片预览列表+分页显示
针对图片列表展示信息,一开始没有做过相关类似的功能,大多都是以表格行显示为主,所以刚开始实现这个功能的时候是懵逼的.无从下口.在网上搜索一时半会也没找到合适的解决方案.大致就是类似于下图这样,每条数据 ...
- Dev TreeList 某一列进行格式化显示
private void treeList1_GetNodeDisplayValue(object sender, GetNodeDisplayValueEventArgs e) { ...
- shell编辑器vi的常用命令
一:翻页 ctrl+u向上翻半页 ctrl+f向上翻一页 ctrl+d 向下翻半页 ctrl+b 向下翻一页 二:移动光标指令 0: 光标移至当前行首 $: 光标移至当前行尾 三:常用插入.删除指令 ...
- java 字符串笔记
java字符串当中有三个关于字符串对象的类. String 首先谈论下他们各自的含义: 1.String含义为引用数据类型,是字符串常量.是不可变的对象,(显然线程安全)在每次对string类型进行改 ...
- JavaScript--鼠标滚动改变图片大小
鼠标滚动改变图片的大小: 原理:当鼠标滚动时改变了zoom的值: <!DOCTYPE HTML> <html> <head> <title>通过鼠标滚轮 ...
- [转]SQL中 OVER(PARTITION BY) 取上一条,下一条等
OVER(PARTITION BY)函数介绍 开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...