您的位置:首页 > 移动开发 > Android开发

Android中Activity界面展示与跳转及数据传递

2013-03-07 16:12 489 查看
Activity简介
Activity是Android的四大组件之一,它负责管理Android应用程序的用户界面。
一个应用程序一般会包括若干个Activity,每一个Activity组件负责一个用户界面的展现,
同时Activity是通过调用setContentView()方法来显示指定的组件。需要注意的是,这个方法
既可以接收View对象为参数,也可以接收布局文件对应的资源ID为参数。
在应用程序中,Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,例如:
onKeyDown()按键按下事件,onKeyUp()按键弹起事件,onTouchEvent()点击屏幕事件。

Activity的创建
在Android应用中,可以创建一个或多个Activity,步骤如下:
1——定义一个类继承Activity或者其子类,通常是Activity类
2——在res/layout目录中创建一个xml布局文件,用于创建Activity的布局
3——在AndroidManifest.xml文件中注册Activity
4——重写Activity的onCreate()方法,并在该方法中使用setContentView()加载指定的布局文件
思考:为什么Activity需要的AndroidManifest.xml文件中注册?
答:我们会在隐式意图中讲解

Activity的生命周期
生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具
有相应的生命周期,Activity的生命周期中分为三或四种状态,运行状态、暂停状态,停止状态,杀死状态。
1——运行状态(Run)
当Activity在屏幕是最前端时,它是可见的、有焦点的,可以用来处理用户的操作,如单击,双击,
长按事件,这种状态称为运行状态。
2——暂停状态(Pause)
在某些情况下,Activity对用户来说任然是可见的,但它不再拥有焦点,即用户不能对其操作。例如:
当Activity被遮住一半时,用户能看见该Activity,但不能对其操作。在这种情况下,当内存不足时,
这个暂停状态的Activity可能会被Android系统“杀死”进程。
3——停止状态(Stop)
当Activity完全看不见时,它就处于停止状态,在这种情况下,当内存不足时,这个停止状态的
Activity很容易被Android系统“杀死”进程。
4——杀死状态(Kill)
这个Activity在后台,被Android系统杀死了所在的进程

Activity从一种状态变化到另一种状态,会执行一些回调方法,程序员需要对这些方法有所理解:
1——onCreate()创建时执行
根据R文件中的ID值,查询对应的控件
2——onStart()可见时执行
3——onRestart()再次回前台时执行
4——onResume()获取焦点时执行
5——onPause()失去焦点时执行
6——onStop()进入后台时执行
7——onDestroy()销毁时执行
回收资源,停止视频等资源

横竖屏切换时的生命周期
当手机横竖屏切换时,Activity会销毁重新创建,(模拟器横竖屏切换用ctrl+F11组合键)如果这样,
对实际开发一定是有影响的,如果不希望在手机横竖屏切换时Activity会销毁重新创建,可以在Android
清单文件中设置Activity的configChanges属性,代码如下:
android:configChanges=”orientation|keyboardHidden|screenSize”
如果希望界面一直处于横屏或竖屏,可以在Android清单文件中设置代码如下:
竖屏:android:screenOrientation=”portrait”
横屏:android:screenOrientation=”landscape”
以上属性都在<activity>标签中定义
3.2 在Activity中使用Intent
3.2.1 Intent介绍
在Android系统中,组件之间可以完成通信功能,此时就需要使用Intent。
Intent叫意图,它最常用的功能是绑定应用程序组件,并在应用程序之间进行通信。
Intent一般用于启动Activity,启动服务,发送广播。
负责Android应用程序三大核心组件相互间的通信功能。
启动Activity二个API如下:
startActivity(Intent)
startActivityForResult(Intent)

显示意图和隐示意图
Android中Intent寻找目标组件的方式有二种,一种是显示意图,另一种是隐式意图。
1——显示意图:
在通过Intent寻找目标组件时,需要明确指定组件的名称。适用于寻找程序员自己写的组件。
方式一:适合于访问自己应用中的界面
Intent intent = new Intent(this,Activity02.class);
startActivity(intent)

方式二:适合于访问第三方应用中的界面,且界面类名知道的情况下
Intent intent = new Intent();
Intent.setClassName(“应用在模拟器中的唯一包名”,”包名.类名”);
startActivity(intent)

。。。。。。
2——隐式意图:适合于访问第三方应用中的界面,且界面类名不知道的情况下(做完应用后再讲)
没有明确指定Intent寻找的目标组件,Android系统会根据隐式意图提供的参数(动作,类别,数据),
来找到最适合的组件,如果找到多个适合的组件,Android系统会提示用户选择哪一个最适合的组件。
动作:这个Intent用来干什么,例如:打电话,打开浏览器
类别:被执行动作的附加信息,例如:当前Activity作为开机后看到的第一个界面,
我们常用DEFAULT这个默认种类
数据:是给Intent需要的信息,不同的动作有着不同的数据,例如:打电话需要数据:tel:110,
其中tel:为前缀,即schema,110为打电话时需要的号码
例如:打电话就是一个典型的隐式意图的案例。
Intent intent = new Intent()
Intent.setAction();动作
Intent.addCategory();类别可省
Intent.setData();数据
startActivity(intent);
Activity中的数据传递
数据传递方式
在Android开发中,经常要在Activity之间传递数据。Intent不仅可以开启Activity,也可以用来在Activity
之间传递数据。
方式一:
Activity01.java代码如下:
String data = “Hello”;
Intent intent = new Intent(this,Activity02.class);
Intent.putExtra(“DATA”,data);
startActivity(intent);
---------------------------------------------------------
Activity02.java代码如下:
Intent intent = getIntent();
String data = Intent.getStringExtra(“DATA”);

方式二:
Activity01.java代码如下:
Bundle bundle = new Bundle();
Bundle.putString(“NAME”,”哈哈”);
Bundle.putInt(“AGE”,22);
Intent intent = new Intent();
Intent.putExtras(bundle);
startActivity(intent);
---------------------------------------------------------
Activity02.java代码如下:
Intent intent = getIntent();
Bundle bundle = Intent.getExtras();
String name = Bundle.getString(“NAME”);
Int age = bundle.getInt(“AGE”);

回传数据
在某些情况下,一个Activity需要得到第二个Activity的数据,这种情况就叫回传数据。
Android提供了一个startActivityForResult()方法,来实现回传数据。
Activity01.java代码如下:
Intent intent = new Intent(this,Activity02.class);
startActivityForResult(intent,1);

//当Activity02界面关闭时执行,即Activity01界面一直监听Activity02界面是否关闭了,
调用finish()方法
public void onActivityResult(){
//获取Activity02传回的数据
//再进行处理
}
---------------------------------------------------------
Activity02.java代码如下:
Intent intent = getIntent();
Intent.putExtra(“DATA”,”哈哈”);
setResult(1,intent);
finish();

Activity的启动模式
Android下的任务栈
Android采用任务栈的方式来管理Activity的实例。当启动一个应用时,Android就会为之创建一个
任务栈。先启动的Activity压在栈底,后启动的Activity压在栈顶,通过启动模式可以控制Activity在任务栈
中的加载情况。

Activity的4种启动模式
在实际开发中,应根据特定的需求为每个Activity指定恰当的启动模式。Activity的启动模式有四种:
standard、singleTop、singleTask和singleInstance。我们可以在android清单文件中通过<activity>标签的
launchMode属性可以设置启动模式,如果不设置的话,默认是standard启动模式。
1——standard模式:
每当启动一个新的activity,它就会进入任务栈,并处于栈顶位置,
系统不会判断栈顶或栈中是否已有相同的activity。
2——singleTop模式:
当启动的activity已经位于栈顶时,则直接使用它不再创建新的activity;
如果启动的activity没有位于栈顶,还是会创建新的activity进入栈顶。
3——singleTask模式:
强调整个应用程序中只有一个activity
当启动activity时,系统首先检查栈中是否存在该activity,
如果发现有该activity,并将该activity之上的所有activity出栈,
如果没有该activity,还是会创建新的activity进入栈顶。
4——singleInstance模式:
强调整个android系统中,只有一个activity
如果要启动的activity不存在,系统会先创建一个新的任务栈,
再创建该activity,最后将该activity加入栈顶;
如果要启动的activity已存在,无论位于哪个应用程序的任务栈中,
系统都会将该activity所在的任务栈转到前台,从而使该activity显示出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息