Activity是Android应用程序核心组件中最基本的一个,是用户和程序交互的窗口,一个Activity通常对应一个单独的视图,一个APP由一个或者多个Activity构成,Activity用于显示信息给用户,并且之间可以相互进行跳转,Activity之间的跳转有返回值。
每一个Activity都被定义为一个独立的类,他继承了Android中的android.app.Activity,在Activity类中将使用setContentView方法来显示由视图控件组成的用户界面,并对用户通过这些视图控件所出发的时间做出响应。
Activity系统根据生命周期的不同阶段唤起对应的回调函数来执行代码,从启动到销毁一个Activity有着一套有序的回调函数。
这七个方法贯穿整个Activity的生命周期。
一张图来表示
大多数的APP都包含多个Activity,不论这些Activity是主Activity还是为了响应用户行为而新建的,系统都会调用新的Activity实例中的onCreate()方法,通常情况下我们会在onCreate()方法内声明一些UI元素或者定义一些成员变量等基本操作,但onCreate()方法中劲量少做事情,以免程序启动太久都看不到界面。
一旦onCreate()操作结束,系统会立即执行这个Activity的onStart()方法和onResume()方法,最终使得Activity停留在Resumed状态,直到一些因素发生变化才会改编这个状态,例如切换到另外一个Activity或者退出程序。
一旦我们退出软件,系统会执行Activity的onDestroy()方法,将Activity从系统中完全移除,我们通常是在执行了 onPause() and onStop() 之后再调用onDestroy() 。
在使用app的过程中,运行的Activity经常会被其他组件挡住,例如提示电量不足的提示框等, Activity可见但不可操作,这个时候Activity就会调用onPause()方法进去Pause状态,这个方法会停止当前Activity进行的操作,并保存那些有可能需要长期保存的信息,如果用户从暂停状态返回到Activity,系统会恢复那些数据并执行onResume()方法。
当我们从APP-A切换到APP-B之后,APP-A会调用onStop()方法,在onStop()方法中我们一般释放一些不再需要的资源
当我们从stop状态回到前台时候,会调用onRestart()方法,系统再调用onStart()方法,
Activity的生命周期可以根据不同的标准分为完整生命周期、可见生命周期和前台生命周期。
我们创建一个android工程,然后重写那些方法。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("执行onCreate...");
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
System.out.println("执行onStart...");
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("执行onResume...");
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("执行onPause...");
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("执行onStop...");
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("执行onDestroy...");
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
System.out.println("执行onRestart...");
}
}
在模拟器中运行,查看日志
然后我们按home返回到桌面
按菜单键,选择回到刚才的界面
按返回键退出Activity
新建一个Activity步骤如下
MyActivity.java
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);// 使用setContentView方法显示一个布局文件
}
}
my_activity_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个TextView" />
</LinearLayout>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activitytest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 注册一个activity -->
<activity android:name="com.example.activitytest.MyActivity" >
<!-- 如果是主activity,需要添加如下过滤器来告诉系统这是入口 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这样,一个Activity就创建成功了。
只要按下返回键就可以销毁当前Activity,但是假如我们希望通过代码方式来销毁Activity,可以使用Activity类提供的finish()方法来实现。
修改一下上面的代码
MyActivity.java
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);// 使用setContentView方法显示一个布局文件
Button button = (Button) findViewById(R.id.finishActivity); // 找到这个按钮
button.setOnClickListener(new OnClickListener() { // 给这个按钮添加一个点击事件
@Override
public void onClick(View v) {
finish(); // 当点击按钮时,销毁这个activity
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("onDestroy方法被调用");
}
}
my_activity_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个TextView" />
<Button
android:id="@+id/finishActivity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="关闭这个activity" />
</LinearLayout>
这时候运行该程序,点击按钮,这个Activity就会被关闭。
从上面的代码运行结果来看,控制台上输出了“onDestroy方法被调用”,由此可见,在执行finish()时执行了onDestroy()方法。
实际上他们的区别在于 onDestroy()是生命周期方法,是你的Activity结束的时候由Android系统调用的,你不能直接调用onDestroy()来结束你的Activity,一般做法是调用finish()