设为首页 加入收藏

TOP

Android Activity详解(一)
2014-11-24 14:30:28 来源: 作者: 【 】 浏览:2
Tags:Android Activity 详解


Activities 是一个程序的组件之一。它的主要功能是提供界面。


一个程序一般由多个Activity组成,各activities之间关系很松散,它们之间没有直接的关联。必须有一个activity被指定为主activity,它是程序启动时首先显示的界面。每个activity都可以随意启动其它的activity。每当一个activity被启动,则前一个activity就被停止。一个程序中的所有启动的activity都被放在一个栈中,所以被停止的activity并没有销毁,而在存于棧中。新启动的activity先被存放于栈中,然后获得输入焦点。在当前活动的activity上点返回键,它被从棧中取出,然后销毁,然后上一个activity被恢复。


当一个activity因为新的activity启动而被停止时,它会收到状态变化的通知,这样的变化有多个,每个都会引起系统调用一个相应的回调方法以通知activity,这些回调方法被统称为“生命周期回调方法”。这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。


1 从类activity继承。


2 实现“生命周期回调方法”


两个最重要的方法是:


onCreate()--这个是必须实现的函数,在其中做初始化工作。记住:你必须在此函数中调用setContentView()函数的设置Activity的界面。


onPause()--这个虽然很重要,但不是要必须实现的。此函数在用户离开Activity时被调用(这一般并不表示Activity要被销毁了)。在这个函数中,你一般需要提交那些需保存状态的数据(因为用户可能不再返回到这个Activity)。


其它回调方法视情况实现。



此处的用户界面指的就是activity上的控件们。所有的控件都从View类派生,所以可以把它们都称为View。每个控件占据一个矩形区域。


控件又分为以下两类:Widgets是完成特定功能的控件,比如button,text field,checkbox 等。Layouts是容纳Widgets控件并进行排版的控件,当然,Layout中还可以容纳Layout。Widgets从View类派生,Layouts从ViewGroup类中派生,开发者可以从View或ViewGroup派生创造自己的控件。


定义界面的最好的方法是使用XML格式的layout文件,它作为资源保存在工程中,可以在工程的res/layout下面找到这些XML文件。通过这种方式就做到了代码与界分离。把layout 下的某个XML设置为某个Activity的界面,需调用Activity的setContentView(),把XML的资源ID作为参数传入即可。


为了能让系统操作你的Activity,你必须在工程的名单文件中声明它。例如:




...



...



当然有很多属性可以设置给Activity,比如label,icon或主题等等。详情请查看元素的说明。




可以为一个元素指定多个过虑器。使用元素指定。intent过虑器的目的是告诉其它组件如何启动这个Activity。当你使用ADT创建一个新工程时,根Activity被自动创建,它已具有两个意图过虑器,一个意图过虑器声明这个Activity负责响应“main”action;另一个过虑器声明这个Activity须被置于”launcher”类别之下。一般是这个样子:








中就是过滤器们。说明此Acitivity是程序的”main”入口,指出这个Acitivity需要在系统的应用列表中列出。


如果你写的程序中的Activity不需被其它程序调用,那么不需为这个Activity增加任何意图过滤器。但程序中必须有一个Activity被指定为”main” Action和”launcher” category。你自己程中的 Activity可以用更直接的方式调用。


然而,如果你想让你的Activity被其它程序调用,那么你需要为它增加意图过滤器。这些过意图滤器包括,以及。这些元素指明了你的activity响应何种类型的intent。


你可以用startActivity()启动一个activity,它有一个参数是intent,你需要在这个intent中指明要调用的activity。Intent中你可以明确地指定要启动的activity,或只指定activity的类型,此时系统会为你挑选一个合适的activity,这个activity可能位于其它程序中,也可能位于你自己的程序中。Intent中可以带一坨被新activity使用的数据(相当于参数传递)。


在你的程序内部,如果需要启动一个内部的activity,你需在intent中明确指定新activity的类名。例如:


Intent intent = new Intent(this, SignInActivity.class);


startActivity(intent);


SignInActivity是要启动的activity类。


然而,你的程序可能想执行自身没有提供的功能,比如发出邮件,发送短信息等。此时,需要启动其它程序提供的activity。此时就体现出intent的真正价值来了:它可以很容易地启动其它程序提供的activity,你只需要在intent中指定你要执行的动作,然后调用 startActivity() ,系统就会跟据你的需要,为你选择一个合适的activity,并启动它。如果同时有多个activity可以执行这动作,那么用户可以选择哪个被使用。例如,你想让用户发送一个电子邮件,你可以创建以下的Intent:


Intent intent = new Intent(Intent.ACTION_SEND);


intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);


startActivity(intent);


putExtra()是设置扩充数据的,.EXTRA_EMAIL表明第二个参数recipientArray里面放的是多个email地址。当发邮件的程序被启动并接收到这个intent时,它就把邮件地址们放到它的Acitivity界面的“to”控件中。当用户发送完毕返回时,你的activity就恢复运行(resume)。可以看到,启动另外一个程序是多么的容易。


有时,你可能想从你启动的activity获得其执行后返回的结果。此时你可以用方法startActivityForResult()来启动新acitivity(不再是startActivity了)。然后,你的程序还需要定义回调方法onActivityResult()。当新activity运行结束时,它把一个intent返回给你的程序,这个intent是在onActivityResult()中被接收。


例如:你想让用户打开通讯录,从中选择一个联系人,然后你取得用户所选的联系人,对之进行处理。以下是示例代码:


private void pickContact() {


//Create anintent to "pick" a contact, as defined by the content provider URI


Intent

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android开发:什么是Parcel(2) 下一篇Android菜单详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: