Android 学习手札(二) 活动(Activity)组件

时间:2024-11-15 15:37:01

1.建立和配置Activity

  建立Android工程时已经自动生成了一个默认的Activity,同时也生成了很多与Activity相关的文件,例如,res目录中的XML及图像文件、AndroidManifest.xml文件。虽然系统会为则合格默认的Activity自动生成所有必须的资源,但当假如新的Activity时,有很多内容需要开发人员手工进行配置。

  每一个Activity都会对应AndroidManifest.xml文件中的一个<activity>标签。在<activity>标签中有一个必选的属性:android:name,该属性需要指定一个Activity类的子类。

    · 指定完全的类名(packagename+classname)。

    · 只指定类名。该类所在的包名需要在<manifest>标签的package属性中指定。

    · 指定相对类名,只是<activity>标签的android:name属性中不仅指定类名,还有部分包名。

  <activity>标签除了有android:name属性外,还有很多可选的属性。比较常用的有android:label和android:icon。

    · android:label 属性可以指定一个字符串或资源ID,应用程序中有很多地方都会使用android:label属性值,例如,在Android手机的应用程序列表中程序图标下方的文字;如果未使用setTitle方法色沪指Activity的标题,系统会将android:label属性值座位Activity的默认标题。如果<activity>标签未指定android:label属性,系统会使用<application>标签的android:label属性值,也就是说<application>标签的android:label属性值是<activity>标签中的android:label属性的默认值。

    · android:icon 属性必须指定一个图像资源ID,这个资源ID所制定的图像将作为应用程序列表中的程序图标。如果未指定<activity>标签的android:icon属性,系统会使用<application>标签的android:icon属性来代替。

  在<activity>标签中还需要一个<intent-filter>自标签来配置Activity的特性。在<intent-filter>标签中比较常用的有两个子标签:<action>和<category>,这两个标签只有一个<android:name>属性。

    · <action>标签的android:name 属性用户指定Activity 所接收的动作。例如,ACTION_MAIN 常量的值是 android.intent.action.MAIN, <action> 标签的android:name属性值就可以指定为 android.intent.action.MAIN。如果指定该值,标识当前的Activity是Android应用程序的入口,也就是第一个启动的Activity(虽然Android应用程序没有Main函数,但仍然需要指定一个入口才可以运行)。

    · <category>标签的android:name 属性用于设置Activity的种类。如果<category>标签的android:name 属性值是 android.intent.category.LAUNCHER, 标识当前的Activity将被显示在Android系统的最顶层。

  在Activity类中有什多方法可以获得、设置某些信息,或进行某些操作,例如,getTitle和setTitle方法分别用来获得和设置Activity的标题,finish方法用来关闭Activity。

2.Activity的生命周期

  在Activity从建立到销毁的过程中需要在不同的阶段调用7个生命周期方法。

    · protected void onCreate(Bundle savedInstanceState)

    · protected void onStart()

    · protected void onResume()

    · protected void onPause()

    · protected void onStop()

    · protected void onRestart()

    · protected void onDestroy()

  上面7个生命周期方法分别在4个阶段按一定的顺序进行调用:

    · 开始Activity:在这个阶段一次执行3个生命周期方法——onCreate、onStart和onResume。

    · Activity 失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,当前的Activity会失去焦点。在这一阶段会一次执行onPause和onStop方法。

    · Activity重新获得焦点:如果Activity重新获得焦点,会一次执行3个生命周期方法——onRestart、onStart和onResume。

    · 关闭Activity:当Activity呗关闭时系统会一次执行3个生命周期方法——onPause、onStop和onDestroy。

  在执行的过程中可以改变系统的执行轨迹的生命周期方法是onPause和onStop。如果在执行onPause方法的过程中Activity重新获得了焦点,然后又失去了焦点。系统将不会再执行onStop方法,而是按照如下顺序执行相应的生命周期方法:

    onPause -> onResume -> onPause

  如果在执行onStop方法的过程中Activity重新获得了焦点,然后又失去了焦点。系统将不会执行onDestroy方法,而是按照如下顺序执行相应的生命周期方法:

    onStop -> onRestart -> onStart -> onResume -> onPause -> onStop

  因此,Activity有如下3种生命周期:

    · 整体生命周期:onCreate -> ... -> onDestroy

    · 可视生命周期:onStart -> ... -> onStop

    · 焦点生命周期:onResume -> onPause

Android 学习手札(二) 活动(Activity)组件

 注意:由此可看出,系统子啊终止应用程序进程时会调用onPause、onStop和onDestroy方法。onPause方法排在最前面,也就是说,Activity在失去焦点时就可能被终止进程,而onStop和onDestroy方法可能没有机会执行。因此,应该在onPause方法中保存当前Activity状态,这样才能保证在任何时候终止进程时都可以执行保存Activity状态的代码。