创建3个活动,创建3个布局文件,分别为,Mainacticity, NoramlActivity, DialogActivity,布局文件是main_layout,normal_layout, dialog_layout;
Mainacticity代码如下:
package com.example.activitycycletest;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
@Override
//onCreate()方法会在活动第一次被创建时使用,在这个方法中完成活动的初始化操作
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate:");
//加载布局文件
setContentView(R.layout.activity_main);
//建立两个按钮
Button startnormalactivity = (Button) findViewById(R.id.startnormlactivity);
Button stardialogactivity = (Button) findViewById(R.id.startdialogactivity);
startnormalactivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,NormalActivity.class);
startActivity(intent);
}
});
stardialogactivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,DialogActivity.class);
startActivity(intent);
}
});
}
//onStart()方法在活动有不可见变为可见
@Override
protected void onStart(){
super.onStart();
Log.d(TAG, "onStart");
}
//onResume()这个方法在活动准备好与用户交互时使用,此时的活动一定是位于返回栈的栈顶,并且处于允许状态
@Override
protected void onResume(){
super.onResume();
Log.d(TAG, "onResume");
}
//onPause()方法在系统准备去启动或者恢复另外一个活动时使用
@Override
protected void onPause(){
super.onPause();
Log.d(TAG, "onPause");
}
//onStop()在活动完全不可见时使用,与onPause()的区别在于,如果启动的是一个对话框式的活动,那么执行onPause()
@Override
protected void onStop(){
super.onStop();
Log.d(TAG, "onStop");
}
//onDestroy()在活动被销毁之前调用,之后的活动的状态变为销毁状态
@Override
protected void onDestroy(){
super.onDestroy();
Log.d(TAG, "onDestroy");
}
//onRestart()方法在活动由停止状态变为运行状态时使用,也就是活动被重新启动
@Override
protected void onRestart(){
super.onRestart();
Log.d(TAG, "onRestart");
}
}
NoramlActivity文件
package com.example.activitycycletest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class NormalActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_normal);
}
}
DialogActivity:
package com.example.activitycycletest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class DialogActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
}
main_layout,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/startnormlactivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Normal Activity">
</Button>
<Button
android:id="@+id/startdialogactivity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start Dialog Activity">
</Button>
</LinearLayout>
normal_layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="this is normal activity">
</TextView>
</LinearLayout>
dialog_layout;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
//TestView用于显示一行文字
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="this is dialog activity">
</TextView>
</LinearLayout>
AndroidManifest
<activity android:name=".DialogActivity"
android:theme="@style/Theme.AppCompat.Dialog">
</activity>
<activity android:name=".NormalActivity" />
<activity android:name=".MainActivity">
<intent-filter
android:label="testactivity">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
运行整个程序时,查看日志:
2019-09-01 01:47:41.287 5824-5824/com.example.activitycycletest D/MainActivity: onCreate
2019-09-01 01:47:41.756 5824-5824/com.example.activitycycletest D/MainActivity: onStart
2019-09-01 01:47:41.761 5824-5824/com.example.activitycycletest D/MainActivity: onResume
当按下Start Normal Activity按钮时,由于NormalActivity完全把MainActivity完全挡住,所以onPause()于onStop()都要调用
2019-09-01 01:59:51.358 5824-5824/com.example.activitycycletest D/MainActivity: onPause
2019-09-01 01:59:52.075 5824-5824/com.example.activitycycletest D/MainActivity: onStop
按下back键,此时oncreate()不会被调用,因为MainActivity没有被重新创建
2019-09-01 02:06:14.707 5824-5824/com.example.activitycycletest D/MainActivity: onRestart
2019-09-01 02:06:14.707 5824-5824/com.example.activitycycletest D/MainActivity: onStart
2019-09-01 02:06:14.708 5824-5824/com.example.activitycycletest D/MainActivity: onResume
按下Start Dialog Activity键只有onPause()方法得到执行,没有执行onStop(),因为DialogActivity没有完全的挡住MainActicity
2019-09-01 02:08:35.569 5824-5824/com.example.activitycycletest D/MainActivity: onPause
按下back键,只有onResume()得到执行
2019-09-01 02:11:45.054 5824-5824/com.example.activitycycletest D/MainActivity: onResume
最后在按下back键,活动被销毁
2019-09-01 02:13:36.266 5824-5824/com.example.activitycycletest D/MainActivity: onPause
2019-09-01 02:13:37.511 5824-5824/com.example.activitycycletest D/MainActivity: onStop
2019-09-01 02:13:37.512 5824-5824/com.example.activitycycletest D/MainActivity: onDestroy