本文是验证两个Activity之间切换时各自生命周期的状态转变。
第一种情况—BActivity完全覆盖AActivity
通过Android studio新建一个工程文件并命名为ActivityLifeCycle,然后往工程里添加两个activity,分别命名为AActivity和BActivity,对应的layout为activity_a.xml和activity_b.xml。代码分别如下:
AActivity.java
public class AActivity extends AppCompatActivity {
private final static String TAG="ActivityLifeCycle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
findViewById(R.id.A2B_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(AActivity.this,BActivity.class));
}
});
Log.d(TAG,"A on Create()");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"A on onStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"A on onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"A on onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"A on onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"A on onDestroy()");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"A on onRestart()");
}
}
BActivity.java
public class BActivity extends AppCompatActivity {
private final static String TAG="ActivityLifeCycle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
Log.d(TAG,"B on Create()");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"B on onStart()");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"B on onResume()");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"B on onPause()");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"B on onStop()");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG,"B on onDestroy()");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG,"B on onRestart()");
}
}
activity_a.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".AActivity">
<Button
android:text="启动B activity"
android:id="@+id/A2B_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is A activity!"
android:layout_marginTop="40dp" />
</LinearLayout>
activity_b.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical"
tools:context="com.jarwell.activity.activitylifecycle.BActivity">
<TextView
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is B activity!"
android:layout_marginTop="40dp" />
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jarwell.activity.activitylifecycle">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.jarwell.activity.activitylifecycle.BActivity"/>
<activity android:name="com.jarwell.activity.activitylifecycle.AActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
之后就可以运行启动app,启动后界面显示所示:
此时Logcat打印结果如下:
接着我们通过按钮启动BActivity,界面显示如下:
此时Logcat打印结果如下:
然后,通过返回键返回AActivity界面,则此时Logcat打印结果如下:
第二种情况—BActivity不完全覆盖AActivity
我们通过AndroidManifest设置BActivity的主题为dialog时(实现不完全覆盖的情况),即将AndroidManifest文件下的BActivity声明部分改为:
<activity android:name="com.jarwell.activity.activitylifecycle.BActivity"
android:theme="@style/Theme.AppCompat.Dialog"/>
之后重新运行app,启动后界面显示和Logcat打印结果仍然和第一种情况一样,接着我们通过按钮启动BActivity,界面显示如下:
Logcat打印结果如下:
分析:通过与第一种情况进行对比,可以发现AActivity的onStop()方法没有被调用。
接着,通过返回键从BActivity返回AActivity,则Logcat打印结果如下:
据此,验证完成!