Activity详解一 配置、启动和关闭activity
先看效果图:

Android为我们提供了四种应组件,分别为Activity、Service、Broadcast receivers和Content providers,这些组建也就是我们开发一个Android应用程序的基石。系统可以通过不同组建提供的切入点进入到开发的应用程序中。对用户来说不是所有的组建都是实际的切入点,但是他们之间都是相互依赖的,它们每一个作为存在的实体,扮演着特定的角色,作为独一无二的基石帮助开发者定义Android应用的行为。下面我将整理自己的Activity学习点滴:
一个Acitvity作为一个显示在屏幕上的用户交互界面,比如在电子邮件应用中,一个用来显示收件列表的Activity,一个用来写邮件的Activity,一个阅读邮件内容的Activity,等等。Activity用来提供用户体验,许多不同体验的Activity聚集在一起即可以形成一个Android应用程序的用户体验,每一Activity都是相互独立的。应用除了可以访问自己的Activity,也可以访问其他APP的Acitivity(需要被APP允许)。
1.如何创建一个Activity?
必须创建一个Activity的 子类,在子类中需要实现Activity状态在生命周期中切换时系统回调的函数(onCreate、onStart、onResume、onPause、onStop、onDestroy),当然并非所有的函数都需要重新实现。其中两个比较重要的函数为onCreate和onPause:
onCreate(),此方法必须要重写。系统调用此方法创建activity,实现该方法是你初始化你所创建Activity的重要步骤。其中最重要的就是调用 setContentView() 去定义你的要展现的用户界面的布局。
onPause(),当系统任务用户离开此界面时会调用此方法,此时并非销毁一个Activity。通常在这里就要处理一些持久超越用户会话的变化,比如:数据的保存。
为了保证流畅的用户体验和处理,你可以调用其他的回调函数来使你的Atctivity停止或销毁。在onStop()方法中,一般做一些大资源货对象的释放,如:网络或者数据库连接。可以在onResume时再加载所需要资源。
2创建Activity
public class MainActivity extends Activity {
//必须重写的方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//activity的布局
}
}
2.一个Activity创建完成后,为了它可以访问系统必须要声明注册它到应用的AndroidManifest.xml文件中:
<activity
android:name="com.zy.demo.activity.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity>有很多属性供开发者定义不同特色的Activity,比如lable、icon或者theme、style等。其中android:name是必须的属性,用来定义activity的名字,当应用发布后不能改变。
<activity>还提供各种intent-filter,使用<intent-filter>来声明其它应用组件如何激活(启动)Activity,<intent-filter>有包含<action>和<category>两个元素。如上例中<action android:name="android.intent.action.MAIN" />用来表示此Activity需要响应android.intent.action.MAIN(表明为应用程序的主要入口),<category android:name="android.intent.category.LAUNCHER" />表示Activity为LAUNCHER类别,即应用程序会列在Launcher中,允许用户直接启动。以上也是一个应用的主activity所必须的声明方法:一个MAIN action,和一个LAUNCHER category。如果要Activity响应其他应用的隐式的intent,则需要为Activity声明对应action,还可以添加categor和data。
3.Activity的启动
3.1 startActivity
通过调用startActivity(intent)启动Activity,intent用来准确的描述你要启动的Activity,或者你要进行的action,intent也可以用来携带小数据给被启动Acitivity。
当在同一个应用中间需要简单启动另一个Activity,intent明确的定义你要启动Activity类即可:
//定义一个intent,指名要启动的activity:ToStartActivity Intent intent = new Intent(MainActivity.this,ToStartActivity.class); //使用startActivity(),启动activity startActivity(intent);
在你的应用程序需要执行一些自身没有Activity可以执行的行为时,我们可以使用手机上的其他应用程序的Activity来代替执行。比如发送一个mail、查看一张图片、搜索一个单词等等。这个里也就是Intent的重要指出,你可以定义一个intent描述你想要做的行为,等你发送给系统后,系统会启动合适的Acitivty帮你执行,如果有多个应用的Activity都可以处理此行为时,系统会让用户去选择一个。当此Activity执行完毕后,原来的Activity将比
//跨应用从google界面搜索
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "zy");
startActivity(intent);
当跨应用启动Activity时,在定义intent时必须要为他指定具体的acitvity,前提是此activity必须暴露在自己应用程序之外(android:exported="true"):
Intent intent = new Intent();
//指定要启动组建完整的包名,对象名
ComponentName cn = new ComponentName("com.android.settings",
"com.android.settings.RunningServices");
intent.setComponent(cn);
// 使用context.startActivity()时需要新启一个任务
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
3.2 startActivityForResult
通过调用 startActivityForResult(intent),来接收到启动的Acitivity反馈的结果。为了接收接下来启动的Activity的结果,需要重写onActivityResult()这个回调函数。当调用的activity完成后,它将返回一个含有结果的intent给onActivityResult()处理。比如,在应用程序的Activity中,需要用户选择联系人中的一个,Activity需要得到联系人的部分信息:
Intent intent = new Intent(Intent.ACTION_PICK,
Contacts.People.CONTENT_URI);
//启动一个带有选择联系人返回结果的activity
startActivityForResult(intent, PICK_CONTACT_REQUEST);
这里的PICK_CONTACT_REQUEST为自定义的int型请求反馈结果代码。
//重新onActivityResult()用来处理接收到的返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 如果请求requestCode成功,且请求返回的结果resultCode是我们要的PICK_CONTACT_REQUEST
if (resultCode == Activity.RESULT_OK
&& requestCode == PICK_CONTACT_REQUEST) {
// 处理Intent返回的数据,在联系人数据库中查找联系人的名字
Cursor cursor = getContentResolver().query(data.getData(),
new String[] { Contacts.People.NAME }, null, null, null);
if (cursor.moveToFirst()) { // 如果cursor不为空,就查找出联系人的名字
int columnIndex = cursor.getColumnIndex(Contacts.People.NAME);
String name = cursor.getString(columnIndex);
//添加其他功能
}
}
}
这里在要说明是onActivityResult()使用来处理返回结果的,首先要检查的是请求是否成功,然后是否有返回结果,结果是否是startActivityForResult()中所要的,如果满足,则处理通过Intent返回的数据。
4.关闭Activity
1 Activity可以调用finish()方法关闭自己,也可以通过调用finishActivity()的方法关闭一个独立的之前启动的Activity。
2 调用finishActivity()的方法关闭一个独立的之前启动的Activity
//此方法用在关闭使用startActivityForResult(requestCode)启用的Activity
this.finishActivity(requestCode);
关于何时关闭一个Activity,一般由系统直接为我们管理。但是当你确认用户不用返回到此Activity时,我们调用以上方法关闭对应的Activity。
5 Demo代码:
package mm.shandong.com.testusea; import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View; public class TestUseAActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_use_a);
}
//启动第一个activity
public void startFirstActivity(View view) {
Intent intent = new Intent(this, TestUseAActivity2.class);
startActivity(intent);
}
//启动第二个activity
public void startSecondActivity(View view) {
Intent intent = new Intent(this, TestUseAActivity3.class);
startActivity(intent);
}
//启动第三个activity,这个activity 4秒钟后被关闭
public void startThirdActivity(View view) {
Intent intent = new Intent(this, TestUseAActivity4.class);
startActivityForResult(intent, 1);
new Thread() {
@Override
public void run() {
try {
Thread.sleep(4000);
finishActivity(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start(); }
}
本人微博:honey_11
Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽
Activity详解一 配置、启动和关闭activity的更多相关文章
- Activity详解一 配置、启动和关闭activity转载 https://www.cnblogs.com/androidWuYou/p/5887726.html
先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...
- Android四大组件之Activity详解——创建和启动Activity
前面我们已经对Activity有过简单的介绍: Android开发——初始Activity Android开发——响应用户事件 Android开发——Activity生命周期 先来看一下最终结果 项目 ...
- tomcat启动nio,apr详解以及配置
tomcat启动nio,apr详解以及配置 前言 在正文开始之前,我们先在idea工具中看看启动的信息,顺便看下启动的基本信息 在这里插入图片描述可以看到信息有tomcat版本操作系统版本java版本 ...
- Xamarin android 之Activity详解
序言: 上篇大概的讲解了新建一个android的流程.今天为大家带来的是Activity详解,因为自己在开发过程中就遇到 好几次坑,尴尬. 生命周期 和Java里头一样一样的,如图 图片来源于网上哈, ...
- rsync的介绍及参数详解,配置步骤,工作模式介绍
rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...
- log4j.properties 详解与配置步骤(转)
找的文章,供参考使用 转自 log4j.properties 详解与配置步骤 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR ...
- C3P0连接池详解及配置
C3P0连接池详解及配置 本人使用的C3P0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.m ...
- 详解Android中的四大组件之一:Activity详解
activity的生命周期 activity的四种状态 running:正在运行,处于活动状态,用户可以点击屏幕,是将activity处于栈顶的状态. paused:暂停,处于失去焦点的时候,处于pa ...
- SpringBoot Profile使用详解及配置源码解析
在实践的过程中我们经常会遇到不同的环境需要不同配置文件的情况,如果每换一个环境重新修改配置文件或重新打包一次会比较麻烦,Spring Boot为此提供了Profile配置来解决此问题. Profile ...
随机推荐
- JavaScript知识 一、JS的数据类型
一.JS的数据类型 1.基本类型 JS共有5大基本类型,分别是: 1)Undefined.他只有一个值:undefined.如果一个变量被定义但是没有给他赋值,那么这个时候系统会默认给这个变量赋值为u ...
- JAVA服务器搭建之问题总结
负责维护公司产品的web服务器搭建与维护,最近遇到一下状况,今天在这里简单总结一下,希望对于刚刚一些刚入行的小伙伴有所帮助,避免再走弯路. 第一点:Tomcat内存设置: 一.常见的Java内存溢出有 ...
- geotrellis使用(四)geotrellis数据处理部分细节
前面写了几篇博客介绍了Geotrellis的简单使用,具体链接在文后,今天我主要介绍一下Geotrellis在数据处理的过程中需要注意的细节,或者一些简单的经验技巧以供参考. 一.直接操作本地Geot ...
- [OpenCV] Samples 12: laplace
先模糊再laplace,也可以替换为sobel等. 变换效果后录成视频,挺好玩. #include "opencv2/videoio/videoio.hpp" #include & ...
- Microsoft.Office.Interop.Word 创建word
Microsoft.Office.Interop.Word 创建word 转载:http://www.cnblogs.com/chenbg2001/archive/2010/03/14/1685746 ...
- PHP中MySQL操作
本次使用的demo是MySQL的示例数据库employees,点击下载地址,注意在导入的时候,在employees.sql文件中,将source改成你当前的目录. PHP中的demo代码可以在ideo ...
- js制作点击会自动隐藏的导航栏(固定在在头部的)
想必大家应该见过这样的特效,本来头部是固定在网页的最上方的,点一下缩进去,再点一下 又可以缩回来,这种效果怎么实现的呢,我今天就做了一个.菜鸟勿喷. @charset "utf-8" ...
- Android测试提升效率批处理脚本(二)
前言: 前面放出过一次批处理,本次再放出一些比较有用的批处理(获得当前包名.查看APP签名信息等),好长时没来写博客了,简单化,请看正文,更多脚本尽请期待~~~(不定期) 目录 1.[手机录屏(安卓4 ...
- 无聊的人用JS实现了一个简单的打地鼠游戏
直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...
- 【转】浅谈MVC与三层架构
首先给大家引入下MVC的概念: MVC(Model View Controller)模型.视图以及控制器,它是一种较为广泛应用的结构设计模式. 模型:就是在MVC设计模式中需要被显示的数据.在通常情况 ...