Android编程四大组件之Activity用法实例分析
本文实例讲述了android编程四大组件之activity用法。分享给大家供大家参考,具体如下:
这里详细介绍如何创建activity、生命周期、内存管理、启动模式。
创建activity
一.定义activity
1. 定义activity 定义类继承activity
2.在androidmanifest.xml的节点中声明<activity>
显式意图创建activity三种方式方式
//第一种方式:构造函数,代码少 intent intent1 =new intent(this,newactivity.class); startactivity(intent1); //第二种方式:类名形式,灵活,可扩展性强 intent intent2 =new intent(); intent2.setclassname(this,"cn.test.activity.newactivity"); startactivity(intent2); //第三种方式 :包名类名形式,可启动其他程序中的activity intent intent3 =new intent(); intent3.setclassname("cn.test.taskdownloader","cn.test.taskdownloader.mainactivity"); startactivity(intent3);
二.创建activity并传递数据
1.在意图对象中封装了一个bundle对象,可以用来携带数据
2.在新activity中可以获得意图对象以获取其中bundle保存的数据
//传递数据方式一 intent intent1 =new intent(this,newactivity.class); bundle bundle=new bundle(); bundle.putstring("data","test"); intent1.putextras(bundle); startactivity(intent1); //获取意图方式一 bundle bundle2 =getintent().getextras(); toast.maketext(this,bundle2.getstring("data"),0).show(); //传递数据方式二 intent intent2 =new intent(this,newactivity.class); intent2.putextra("data","test2"); startactivity(intent2); //获取意图方式二 toast.maketext(this,getintent().getstringextra("data"),0).show();
三.创建activity获取返回数据
1. 使用startactivityforresult(intent intent, int requestcode) 方法打开activity
2. 重写onactivityresult(int requestcode, int resultcode, intent data) 方法
3 .新activity中调用setresult(int resultcode, intent data) 设置返回数据之后,关闭activity就会调用onactivityresult方法
请求的activity:
public class mainactivity extends activity { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } /** * 创建activity获取返回数据 * @param view */ public void createnew(view view){ intent intent1 =new intent(this,newactivity.class); intent1.putextra("data","请求数据"); //打开activity等待返回 startactivityforresult(intent1,100); } /** * 重写onactivityresult,关闭activity就会调用此方法 */ protected void onactivityresult(int requestcode, int resultcode, intent data) { toast.maketext(this,"requestcode:"+requestcode+",requestcode:"+resultcode+",data"+data.getstringextra("result"),0).show(); } }
返回的activity:
public class newactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.new_activity); toast.maketext(this,getintent().getstringextra("data"),0).show(); //设置返回数据 intent data =new intent(); data.putextra("result","返回的数据"); setresult(200,data); } }
四.隐式意图创建activity
1.显式意图是指在创建意图时指定了组件,而隐式意图则不指定组件,通过动作、类型、数据匹配对应的组件
2.在清单文件中定义<activity>时需要定义<intent-filter>才能被隐式意图启动
3. <intent-filter>中至少配置一个<action>和一个<category>,否则无法被启动
4.intent对象中设置的action、category、data在<intent-filter>必须全部包含才能启动
5.<intent-filter>中的<action>、<category>、<data>都可以配置多个,intent对象中不用全部匹配,每样匹配一个即可启动
6.如果一个意图可以匹配多个activity,android系统会提示选择
生命周期
一.acitivity三种状态
运行:activity在最前端运行
暂停:activity可见,但前端还有其他acti vity,被覆盖一部分,或者前端activity透明
停止:activity不可见,完全被覆盖
二.生命周期相关方法
oncreate:创建时调用,或者程序在暂停、停止状态下被杀死之后重新打开时也会调用
onstart:oncreate之后或者从停止状态恢复时调用
onresume:onstart之后或者从暂停状态恢复时调用,从停止状态恢复时由于调用onstart,也会调用onresume
onpause:进入暂停、停止状态,或者销毁时会调用
onstop:进入停止状态,或者销毁时会调用
ondestroy:销毁时调用
onrestart:从停止状态恢复时调用
如图所示:
三.保存信息相关方法
onsaveinstancestate:在activity被动的摧毁或停止的时候调用,用于保存运行数据,可以将数据存在在bundle中
onrestoreinstancestate:该方法在activity被重新绘制的时候调用,例如改变屏幕方向,savedinstancestate为onsaveinstancestate保存的数据
内存管理
android系统在运行多个进程时,如果系统资源不足,会强制结束一些进程。优先选择哪个进程来结束是有优先级的。以下顺序靠上的优先结束
空:进程中所有activity都已销毁
后台:进程中有一个停止状态的activity
服务:进程中一个运行中的service
可见:进程中有一个暂停状态的activity
前台:进程中正在运行一个activity
启动模式
1.在androidmanifest.xml中的<activity>标签中可以配置android:launchmode属性,用来控制actvity的启动模式
2.在android系统中我们创建的acitivity是以栈的形式呈现的
standard:每次调用startactivity()启动时都会创建一个新的activity放在栈顶
singletop:如果启动的activity时,指定activity不在栈顶就创建,如在栈顶,则不再创建
singletask:如果启动的activity不存在就创建,如果存在直接跳转到指定的activity所在位置
singleinstance:如果启动的activity不存在就创建,如果存在就将指定的activity移动到栈顶
希望本文所述对大家android程序设计有所帮助。
推荐阅读
-
Android四大组件之Service(服务)实例详解
-
Android编程中Handler原理及用法实例分析
-
Android编程之ListPreference用法实例分析
-
Android编程开发之RadioGroup用法实例
-
Android编程之Application设置全局变量及传值用法实例分析
-
Android编程开发之Spinner控件用法实例分析
-
Android编程开发之Spinner组件用法
-
Android编程布局(Layout)之AbsoluteLayout用法实例分析
-
Android编程中常用适配器及自定义适配器用法实例分析
-
Android编程之TabWidget选项卡用法实例分析