Activity是Android系统提供的一个可视的用户交互接口,所有和用户的交互都发生在这里。
声明和使用Activity
创建一个从android.app.Activity继承的java类或其子类继承。
然后至少要在res/layout目录中创建一个布局文件,并在AndroidManifest.xml文件声明窗口类。
布局文件是为了在窗口上放置各种控件,当然我们还可以通过其他方法在窗口上显示控件,甚至是动态添加和删除控件。
要在AndroidManifest.xml文件中声明Activity
<activity
android:name=".MainActivity"
android:label="@string/appname">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
Action和Category可以在多个Activity中使用,如果一个应用程序中多个使用该Action和Category的窗口,系统会在程序列表中生成多个程序图标,每个图标对应
某一个使用android.intent.action.MAIN和使用android.intent.category.LAUNCHER的窗口。当单击某个图标后会显示与其对应的窗口。当然程序启动时会显示第一个
使用android.intent.action.MAIN和android.intent.category.LAUNCHER的窗口。
如果声明普通的Activity,就没必要非得加<intent-filter>标签了
Activity的生命周期
在Activity从创建到销毁的过程中需要在不同的阶段调用7个生命周期方法。
1. onCreate()方法:在创建Activity时回调。该方法是最常见的方法,用于执行初始化。
2. onStart()方法:启动Activity时被回调,也就是当一个Activity变为显示时被回调。
3. onResume()方法:当Activity由于暂停状态恢复为活动状态时调用。调用该方法后,该Activity位于Activity栈的栈顶。该方法总是在onPause()方法之后执行
4. onPause()方法:暂停Activity时被回调。该方法需要快速的执行,因为直到这个方法执行完毕以前,下一个Activity都不能被恢复。该方法中通常用于保存数据。例如,当我们玩游戏时,突然来了一个电话,这时候就可以在该方法中,将游戏状态持久保存起来。
5. onStop()方法:停止Activity时被调用。
6. onRestart()方法:重启Activity时调用,该方法总在onStart()方法以后执行
7. onDestroy()方法:销毁Activity时调用
分别在4个阶段按一定的顺序进行调用
开始Activity:在这个阶段依次执行3个生命周期方法,分别是onCreate、onStart和onResume。
Activity失去焦点:如果在Activity获得焦点的情况下进入其他的Activity或应用程序,当前的Activity会失去焦点。这一阶段执行onPause和onStop方法。
Activity重新获得焦点:这一阶段会执行onRestart、onStart和onResume。
关闭Activity:执行onPause、onStop和onDestroy。
如果在这4个阶段执行生命周期方法的过程不发生状态的改变,系统会按上面的描述依次执行这4个生命周期方法。
但如果发生了改变系统会按照更复杂的方式调用生命周期方法。如下图:
在整个Activity的生命周期中包含两层循环,
第一层循环是onPause→onResume→onPause,第二层循环是onStop→onRestart→onStart→onResume→onPause→onStop。
我们可以将这两层循环看成整个Activity生命周期中的子生命周期。第一层循环称为焦点生命周期,第二层称为可视生命周期。也
就是说第一层循环在Activity焦点的获得与失去的过程中循环,在这一过程中Activity始终是可见的。第二层循环是
在Activity可见于不可见的过程中循环,在这个过程中伴随着Activity焦点的获得与失去。因此Activity有如下3中生命周期:
- 整体生命周期:onCreate→…….→onDestroy。
- 可视生命周期:onStart→……→onStop。
- 焦点生命周期:onResume→onPause。
package com.Wallace;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("onCreate", "onCreate Method is executed");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("onDestroy", "onDestroy Method is executed");
}
@Override
protected void onPause() {
super.onPause();
Log.d("onPause", "onPause Method is executed");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("onRestart", "onRestart Method is executed");
}
@Override
protected void onResume() {
super.onResume();
Log.d("onResume", "onResume Method is executed");
}
@Override
protected void onStart() {
super.onStart();
Log.d("onStart", "onSart Method is executed");
}
@Override
protected void onStop() {
super.onStop();
Log.d("onStop", "onStop Method is executed");
}
}
注意
在Activity的子类中实现这7个生命周期方法时应该在这些方法的一开始调用Activity类中的生命周期方法(如super.onCreate),否则系统会抛出异常。
可按如下步骤操作应用程序。
- 在Activity模拟机上运行程序。
- 按Android模拟器上的电话按钮进入”通话记录”界面,然后退出这个界面。
- 退出应用程序
完成上面3步后,在LogCat视图中可以看到输出信息
Activity的属性
在Android中,Activity是作为一个对象存在的,因此,它与Androoid中其他对象类似,也支持很多XML属性,如图。
我会在下一篇博客里详细的讲解Activity的XML属性。
最后希望大家喜欢我的这篇文章,由于是第一次写,借鉴的不少资料,有什么不对的希望能有读者指出来。