Android 开发学习笔记----活动的生命周期

创建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
发布了40 篇原创文章 · 获赞 9 · 访问量 3298

猜你喜欢

转载自blog.csdn.net/weixin_44706647/article/details/100179353
今日推荐