Activity翻译过来是活动的意思。什么是活动,就是程序与用户之间的一种交互,比如打电话和发短信。每个activity都会被分配一个界面,用户从界面上完成交互,所以,activity可以简单的理解为界面,但他其实不是界面,而是界面的控制器,类似ios中的viewController。
总结一下activity的特点:
程序可以有多个activity
每个activity都会被分配一个界面,相当于iOS中controller与view的关系
存在主activity,相当于iOS中的RootViewController
activity可被其他activity启动
当新的activity启动时,旧的将会进入back stack暂存,其活动会被暂停,这一行为遵循后进先出原则,所以用户点击返回时,新的activity会被销毁,而旧的activity会被唤醒并继续活动。
activity的生命周期中存在多种回调方法,用以检测他自己的活动状态。
要创建一个activity,你只能创建一个Activity
的子类或者孙子类。 在你的子类里,你需要实现系统调用的回调方法,这些方法用于activity在生命周期中进行事务处理。例如创建,停止,恢复,销毁。其中两个最重要的回调方法分别为:
onCreate()
必须实现。系统会在实例化activity的时候调用这个方法,类似于iOS中的viewDidLoad()。我们可以在这个方法里创建页面所需的其他控件,并且必须使用setContentView(R.layout.activity_main)来加载布局。这里的R我经常搞不明白,甚至以为他跟iOS中的storyboard是一样的,现在知道是不一样的,R是R.java类,他是系统自动生成的索引类,通过id提供Android程序的所有资源的引用。
onPause()
系统将会调用这个方法作为用户离开activity的首先提示(虽然这并不意味着activity正在被销毁)。这通常是你应该在用户会话之前提交并保存任何更改的时机。 (因为用户可能不会再回到这个activity)。
你还应该会用到一些其他的生命周期回调方法,它们将帮助你在activity和可能导致你的activity停止甚至销毁之间保持流畅的用户体验。 所有的生命周期回调方法都将在后面讨论。详细请看管理Activity的生命周期。
activity的用户接口由一些View
的派生类组成的层级结构提供。 每一个view控制acitivity所在window的一个特殊的矩形空间。并且可以响应用户的交互。 例如,一个view可能是一个按钮,当用户碰触的时候将发起动作。
"Layouts"是一组继承了ViewGroup
的布局。它们为子视图提供了唯一的布局模型。 例如线性布局,表格布局,相对布局。你也可以继承View
和ViewGroup
(或它们的子类)去创建你自己的组件或布局,并用它们组成activity布局。
定义布局最常用的方式是使用XML布局文件,它保存在你程序的资源中。这种方式可以保证你的业务逻辑代码和用户交互界面分开。你可以通过setContentView(R.id.xxx)
传递布局文件的ID来设置程序UI。 当然,你也可以在activity代码里自己新建View
,并通过插入子View
到ViewGroup
。 然后把这些视图的根视图传入到setContentView()
。
为了可以访问activity,你必须把它配置到配置文件中。 首先打开配置文件,在<application>
中增加一个<activity>
元素。例如:
<manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application ... > ...</manifest >
你可以给这个元素加入很多其他的属性。 例如名称,图标,或者activity的主题风格。 android:name
属性是唯一用来指定acitivity名称的属性。 一旦你发布了程序,就不能改变它的名字,否则将破坏一些功能,例如程序图标。 (阅读博文查看你不能改变的属性
查阅 <activity>
来获得更多关于如何配置activity。
<activity>
也可以用很多<intent-filter>
来指定其他的组件怎样激活它。
当你使用Android SDK tools来创建一个程序,主activity将会自动包含一个被分类为"launcher"的intent filter,如下:
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
<action>
元素指定程序的入口。 <category>
指出该activity应该被列如系统的启动器(launcher)(允许用户启动它)
如果你想要你的程序更加独立,并不想让其他程序访问你的activity,那么你就不必声明intent filter,只有一个activity 应该有"main"action和"launcher"分类,例如上述例子。你不想公开的activity应该不包含任何intent filter.但你可以使用明确 的intent来启动它们。(下文将详述)。
然而,如果你想要你的activity响应其他程序(或当前程序)的隐式intent,你必须为activity定义额外的intent filter。 每一个你想响应的intent,都必须包含一个 <intent-filter>
,并包含一个 <action>
元素,另外,可以包含一个 <category>
也可以包含一个 <data>
元素。 这些元素指定了intent 的类型。
关于响应intent的更多方式,请查阅 Intents 和 Intent Filter
参考资料:http://www.android-doc.com/guide/components/activities.html