Android之Activity
Activity作为Android四大组件之一可以说是最常见也是最重要的,它主要承担着用户于屏幕交互的职责,
对它的理解主要从以下几个方面开始:
- Activity的使用
- Activity的生命周期
- Activity的启动模式
Activity的使用
创建Activity,然后根据自己的需要重写它的生命周期,大概如下:
public class FirstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 表示activity正在被创建,这是生命周期的第一个方法,我们可以去左一些初始化的工作,
//比如调用setCcontentView加载界面布局资源,初始化需要的数据等。
}
@Override
protected void onStart() {
super.onStart();
// activity正在被启动,这是意见可见,但是还没出现在前台
}
@Override
protected void onResume() {
super.onResume();
// 表示activity已经可见
}
@Override
protected void onPause() {
super.onPause();
// 表示activity正在停止,不能在此做重量级的操作
}
@Override
protected void onStop() {
super.onStop();
// 即将停止,可以做一些不太耗时的回收工作
}
@Override
protected void onDestroy() {
super.onDestroy();
// activity即将被销毁,在这里做回收工作和最终的资源释放
}
}
在activity创建完成后必须要到manifest 文件中声明
<manifest ... >
<application ... >
<activity android:name=".FirstActivity" />
...
</application ... >
...
</manifest >
不然系统会报错android.content.ActivityNotFoundException,
一般会指定应用中的某个 Activity 为“主”Activity,即首次启动应用时呈现给用户的那个 Activity。设置的方式如下:
<activity android:name=".activity.WelComeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
其中
<action android:name="android.intent.action.MAIN"/>
决定了应用最先启动的Activity。而<category android:name="android.intent.category.LAUNCHER"/>
决定应用程序是否显示在程序列表里。
一个应用一般都包含多个activity,例如我们需要从FirstActivity跳转到SecondActivity,我们需要新建SecondActivity并且在manifest文件中声明,然后通过Intent实现跳转:
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
当我们需要从SecondActivity返回数据的时候我们需要用到下面的跳转方法:
int REQUESTCODE = 10000;
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent,REQUESTCODE );
至此基本就把activity的基本使用介绍完了,其实只要掌握了它的生命周期,使用起来还是挺简单的。
Activity的启动模式
(1) standard: 标准模式,也是默认模式。在这种模式下,每次启动一个activity都会重新创建一个新的实例,不管这个实例之前是否存在。
(2) singleTop: 栈顶复用模式。其实这也是一种单例模式,每次启动activity的时候系统都会寻找是存在并且位于栈顶,如果存在那么这个activity就不会被重新创建。如果不存在,就会创建一个新的任务栈。
(3) singleTask: 栈内复用模式。只要activity在栈内存在就不会创建新的实例。
(4) singleInstance: 单实例模式。具有这种模式的activity只能单独的位于一个任务栈。
上面分别介绍了activity的四种启动模式,下面介绍两种方法给activity指定启动模式,第一种直接在AndroidManifest中,如下:
<activity android:name=".activity.ViewTestActivity" android:launchMode="singleInstance"/>
第二种是通过Intent设置标志来指定Activity的启动模式。