Android学习笔记系列四1 —— Activity的认识、创建和配置

Activities

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的子类或者孙子类。 在你的子类里,你需要实现系统调用的回调方法,这些方法用于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的布局。它们为子视图提供了唯一的布局模型。 例如线性布局,表格布局,相对布局。你也可以继承ViewViewGroup(或它们的子类)去创建你自己的组件或布局,并用它们组成activity布局。

定义布局最常用的方式是使用XML布局文件,它保存在你程序的资源中。这种方式可以保证你的业务逻辑代码和用户交互界面分开。你可以通过setContentView(R.id.xxx)传递布局文件的ID来设置程序UI。 当然,你也可以在activity代码里自己新建View,并通过插入子ViewViewGroup。 然后把这些视图的根视图传入到setContentView()

在配置文件中声明activity

为了可以访问activity,你必须把它配置到配置文件中。 首先打开配置文件,在<application>中增加一个<activity>元素。例如:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...  </application ... >
  ...</manifest >

你可以给这个元素加入很多其他的属性。 例如名称,图标,或者activity的主题风格。 android:name 属性是唯一用来指定acitivity名称的属性。 一旦你发布了程序,就不能改变它的名字,否则将破坏一些功能,例如程序图标。 (阅读博文查看你不能改变的属性

查阅 <activity> 来获得更多关于如何配置activity。

使用filter

<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

你可能感兴趣的:(Android学习笔记系列四1 —— Activity的认识、创建和配置)