通过一个Demo来验证:
首先创建一个Project,更改主布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".A_Activity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A_Activity" />
<Button
android:id="@+id/btnJumpB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳转到B_Activity"/>
</LinearLayout>
接着创建一个新的Activity,命名为B_Activity,并创建它的布局文件(与主布局文件大致相同)代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.daxiangzai.androiddemo.moreactivitylifecycle.B_Activity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B_Activity" />
<Button
android:id="@+id/btnJumpA"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Back"/>
</LinearLayout>
我们再来更改MainActivity(我的命名:A_Activity)与新建Activity(我的命名B_Activity)。
A_Activity代码如下:
package com.daxiangzai.androiddemo.moreactivitylifecycle;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class A_Activity extends ActionBarActivity {
private String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
//给按钮设置监听事件
findViewById(R.id.btnJumpB).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 跳转到 B_Activity
startActivity(new Intent(A_Activity.this, B_Activity.class));
}
});
//输出日志
Log.i(TAG, "A_Activity onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "A_Activity onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "A_Activity onResume");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "A_Activity onRestart");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "A_Activity onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "A_Activity onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "A_Activity onDestroy");
}
}
B_Activity代码如下:
package com.daxiangzai.androiddemo.moreactivitylifecycle;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class B_Activity extends ActionBarActivity {
private String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
//给按钮设置监听事件
findViewById(R.id.btnJumpA).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 结束 B _Activity
finish();
}
});
//输出日志
Log.i(TAG, "B_Activity onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG, "B_Activity onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "B_Activity onResume");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "B_Activity onRestart");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "B_Activity onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG, "B_Activity onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "B_Activity onDestroy");
}
}
最后别忘了在配置文件中注册B_Activity(在application标签中添加):
<activity
android:name=".B_Activity"
android:label="@string/title_activity_b_" >
</activity>
Ok,我们来运行程序。
首先当我们一运行程序,在Logcat中就会弹出:
当我们单击按钮跳转到B_Activity时,又会弹出:
当我们点击按钮,结束B_Activity时,又会弹出:
在当我们点击返回键,结束Application时,会弹出:
从上面总结一下两个Activity的运行过程,大致是这样的:
由此可见,当从一个Activity结束返回或跳转到另一个Activity时,首先调用当前Activity的onPause方法,在依次调用新Activity的onCreate、onStart、onResume,其次在依次调用当前Activity的onStop与onDestroy(结束Activity时才调用)方法。
我们来思考两个问题:
(1)为什么要先调用当前Activity的onPause方法?
(2)为什么不先调用当前Activity的onStop与onDestroy方法而是先执行新的Activity的onCreate、onStart、onRestart方法?
第一个问题是这样的,我们可以试想一下,当我们正在播放音乐时,突然来电话了,若没有结束播放音乐的onPause方法,则会发生音乐与来电铃声同时响起的情况发生,影响用户的体验。
接下来第二个问题,若在启动新的Activity前调用当前Activity的onStop与onDestroy方法时,手机会出现一段时间的黑屏状态,从而会影响用户的体验。