activity是与用户进行交互的屏幕,比如:打电话,拍照,发送邮件,浏览地图。每个activity被赋予了一个窗口,在这个窗口上可以勾画用户交互界面。窗口可以填充整个屏幕,也可以比屏幕小,或者悬浮在其它窗口的上面。
一个应用通常包含多个activity,各个activity彼此松散地进行关联。其中有一个activity被指定为main activity,当应用第一次启动的时候,main activity会出现在用户面前。为了执行不同的动作,每个activity都可以启动其它的activity。每次启动一个新的activity,原来的activity会被停止,但是系统仍然会把它保留在back stack中,同时新启动的activity也会压入back stack中,并获得用户焦点。当用户执行完操作,点击后退的时候,当前activity会被弹出back stack,并被destroy,然后前一个activity继续运行。
每个activity都存在生命周期,生命周期中包括各种状态,每当状态发生变化的时候,系统都会调用相应的生命周期回调方法,在回调方法中,给用户提供做一些事情的机会。比如被stop的时候,你的activity应该释放大对象,比如网络连接,数据库连接。当activity被resume的时候,可以重新获取需要的资源并且继续执行之前被中断的动作。这些状态的变化都是activity生命周期的一部分。
创建一个activity
为了创建一个activity,你必须创建一个android.app.Activity类的子类。并且实现回调方法,这样,当activity的生命周期中的状态发生变化的时候,系统可以进行回调。比如:创建,停止,继续,销毁。最重要的方法包括onCreate和onPause。
- onCreate方法中,你应该初始化必要的组件,必须调用setContentView方法来设置activity的用户界面的layout。
- onPause方法,当用户离开activity的时候,会回调此方法。在此方法中,你应该提交需要持久化的变更,因为用户可能不会再回到这个activity。
实现一个用户界面
activity的用户界面由一组继承自android.view.View类的view组成。每个view控制activity窗口中的一个特定的矩形区域,并可以对用户的动作作出响应。比如:一个view可以是一个按钮,当用户点击的时候可以做一系列的动作。
android提供了许多现成的view,你可以用它们来设计和组织你的画面布局。
- widgets:可视可交互的view,比如:button,text field,checkbox,image
- layouts:继承自android.view.ViewGroup类的view。它为子view提供一种布局模式,比如:linear layout,grid layout,relative layout。你也可以通过View或者ViewGroup类的子类来创建自己的widget和layout,然后把它们应用到你的activity中。
定义一个layout的最通用做法是使用一个XML layout 文件,这样你可以把用户界面的设计单独从代码中提取出来,在代码中仅定义activity的各种行为。然后调用setContentView(int layoutResID)方法来指定activity的conent到该XML layout文件。当然,你也可以不使用XML layout文件,而是直接在代码中定义各种View以及ViewGroup,然后把root ViewGroup传递给setContentView(View view)方法。
在manifest文件中声明activity,使用intent filters
<activityandroid:name=".ExampleActivity"android:icon="@drawable/app_icon"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
- action元素指定该activity是应用的main入口点
- category元素指定该activity被追加到系统的应用启动列表中,也就是说允许用户启动该activity。
- 如果你不希望别的应用使用你的activity,那么不需要追加任何其它的intent-filter,当然,在你的应用内部可以使用显式的intent(直接指定包名和类名)来启动activity。
- 在一个应用中,只能有一个activity具有MAIN action和LAUNCHER category。
- 如果你想使用隐式intent(别的应用或者同一应用内部)来启动activity,那么必须为每种intent类型定义一个包含action,category,data的intent-filter。
启动一个activity(不返回结果)
如果要启动的activity在同一个应用的内部,可以采用显式的intent
Intent intent =newIntent(this,SignInActivity.class); startActivity(intent);
如果要启动的activity在另外一个应用的内部,那么只能采用隐式intent
比如:打算发送邮件
Intent intent =newIntent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); startActivity(intent);
recipientArray是一个string数组,存放收件人的email地址。
如果系统通过intent-filter,匹配到多个可以使用的activity的话,会提示用户选择其中的一个。
当邮件发送完成,会回到原来的activity继续运行。
启动一个activity(返回结果)
privatevoid pickContact(){ // Create an intent to "pick" a contact, as defined by the content provider URI Intent intent =newIntent(Intent.ACTION_PICK,Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST); } @Override protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){ // If the request went well (OK) and the request was PICK_CONTACT_REQUEST if(resultCode ==Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST){ // Perform a query to the contact's content provider for the contact's name Cursor cursor = getContentResolver().query(data.getData(), newString[]{Contacts.DISPLAY_NAME},null,null,null); if(cursor.moveToFirst()){// True if the cursor is not empty int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name = cursor.getString(columnIndex); // Do something with the selected contact's name... } } }
从地址簿中选择一个联系人,然后系统会通过回调onActivityResult方法来返回Intent类型的结果数据,然后从contact的content provider中检索出联系人的名字。
关闭一个activity
- 可以通过调用finish()方法结束当前的activity
- 也可以通过调用finish(int requestCode)方法来结束之前通过startActivityForResult(Intent, int requestCode)启动的activity,如果指定的requestCode对应了多个activity,那么所有对应的activity都将被关闭。
相关推荐
在本项目中,"e_5_1-Chat-Activities.rar_android" 提供了一个使用Java语言开发的Android应用程序,其核心功能是实现一个简单的聊天应用。这个应用可能包含多个活动(Activities),每个活动对应于聊天界面的不同...
【标题】"e_5_1-Chat-Activities.zip_DEMO" 指示的是一个包含聊天活动示例的Android应用程序开发项目。这个压缩包是一个专门为初学者设计的教学资源,帮助他们理解和掌握如何构建一个基本的聊天应用。 【描述】中的...
在Android平台上构建一个聊天应用程序是移动开发中的常见任务,它涉及到多个关键技术和组件的整合。"e_5_1-Chat-Activities.rar_android_android chat"这个压缩包文件提供了一个关于如何实现Android聊天功能的示例。...
总之,“slash-activities”是一个利用不和谐平台的斜线命令功能来增强语音活动的系统,而“slash-activities-main”很可能是这个系统的核心组件,包含了实现这些功能的主体代码。开发这样一个系统涉及了对不和谐API...
总之,"Android高级应用源码-TabActivityDemo.zip"是一个宝贵的学习资源,不仅可以让开发者掌握TabActivity的实现,还能深入了解Android应用的架构和组件使用。通过详细研究这个项目,开发者可以提升自己的Android...
在Android应用开发中,活动(Activity)是用户界面的基本单元,它们之间经常需要进行数据交换。...通过提供的示例项目`android-5.1-how-to-pass-data-between-activities-master`,你可以深入学习和实践这些概念。
TabHost允许在同一个视图中展示多个活动(Activities),每个活动对应一个标签,用户可以通过点击标签在不同的内容之间切换,类似于新闻应用中的不同类别或板块。 1. **TabHost介绍**:TabHost是一个容器,可以包含...
9. **实践应用**:在实际开发中,JavaScript的类常用于构建模块化的前端应用,比如React组件,或者在Node.js后端作为服务对象。 通过"class-activities"的学习和实践,开发者可以深化对JavaScript面向对象编程的...
本开源项目"Activities-LaunchMode-demo"旨在通过实例演示不同LaunchMode的工作原理及其应用场景。 1. **Standard (默认模式)** - 标准模式是Activity的默认启动模式。每次启动都会创建一个新的Activity实例,即使...
这使得Rust在构建高性能、低级别的系统软件、网络服务以及浏览器组件等领域有着广泛的应用。 在《O'Reilly Rust Activities》中,你可以期待学习以下关键知识点: 1. **Rust基础知识**:了解Rust的基本语法,包括...
CSS可能通过选择器如`.activities-agency`来定位这些`div`,并应用相应的样式。 最后,JavaScript是一种编程语言,用于添加动态功能和交互性。在`js`文件中,可能会有处理用户输入、数据交换、事件监听和动画效果的...
- **Activities**:活动是应用程序中的一个屏幕,用户可以与其交互。它是应用程序中可见和可交互的部分。 - **Content Providers**:用于存储和检索数据的服务,支持跨应用程序共享数据。 - **Intents**:意图是用于...
开发者可以通过复用已有的Activities快速构建新的应用程序,只需关注自己应用的独特功能,无需重复造轮子。这种模式类似于Web 2.0时代的XML Mash-up,通过组合现有服务生成新的功能。 回顾历史,组件技术的发展经历...
本示例程序展示了如何在Clean Architecture原则下利用Jetpack组件来构建Android应用。 **1. Clean Architecture** Clean Architecture的核心理念是建立一个层次分明的架构,其中每个层次都负责不同的职责,从而...
#### 二、应用组件 - **组件简介**:Android应用程序由多个不同的组件构成,这些组件可以独立地被调用或启动。 - **Activity**:负责提供一个单一的屏幕作为用户界面。 - **Service**:在后台独立执行任务,不与...
Android应用程序设计的核心理念是其组件化结构,主要包括以下五种关键组件: 1. **Activity**:这是应用程序的可视界面,类似于Windows系统中的窗口。Activity负责处理用户交互并展示界面。 2. **Service**:在...
在 manifest 中,描述了每一个组件以及组件的作用,其中有 6 个组件,它们是 Android 应用程序的基石: 知识点一:Activities(活动) Activities 是应用程序的显示层,每一个画面对应于你的应用程序,将会是 ...
5. **java** 目录:源代码的主要存放地,每个包(package)对应应用的一个模块或组件。 6. **res** 目录:资源文件的家,包括布局(layout)、图像(drawable)、字符串(values)等。在这里,你可以编辑XML文件来...