Android:详解activity生命周期

Android:详解activity生命周期

Android时使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合。这个栈也称作返回栈。每当启用一个新的activity,他就会进入栈中,并且出于栈顶的位置。当我们按下返回键或者调用finish()方法去销毁一个活动时,出于栈顶的activity就会出栈,这时前一个活动就会出于栈顶的位置,系统总会显示出于栈顶的activity给用户。
activity定义了7个回调方法,覆盖率生命周期的每一个环节,下面一一来介绍这7个方法。

  • onCreate():该方法在活动第一次创建的时候被调用,你应该在该方法中完成活动的初始化操作,比如加载布局、绑定事件等等。
  • onStart():该方法在活动由不可见变为可见的时候调用。
  • onResume():该方法在活动准备好和用户进行交互的时候调用,此时活动一定位于栈顶,且处于运行状态。
  • onPause():这个方法在系统准备去启用或者恢复另一个活动的时候被调用,我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但是这个方法的执行速度一定要快,不然会影响新的栈顶活动的使用。
  • onStop():这个方法在活动完全不可见的时候调用,它和onPause()最主要的区别在于,如果启动的新活动时对话框模式(以前的活动并不是完全不可见),那么这时候以前的活动会执行onPause()但是不会执行onStop()。
  • onDestory():这个方法子挥动被销毁之前调用,之后活动出于销毁状态。
  • onRestart():该方法在活动由停止状态变为运行状态之前调用,也就是活动被重新调用了。
    这些活动又可以分为3种生存期
  • **完整生存期:**活动在onCreate()方法和onDestroy方法之间所经历的,就属于完整的生存期。一般情况,一个活动在onCreate()种进行各种初始化的操作,在onDestroy()种完成释放内存的操作。
  • **可见生存期:**活动在onStart()方法和onStop()方法之间所经历的,就是可见生存期。在可见生命周期内,活动对用户总是可见的。我们可以通过这两个方法合理的规划那些资源对用户可见。比如在onStart()中对资源进行加载,在onStop()方法中对资源进行释放。
  • **前台生存期:**活动在onResume()到onPause()方法之间所经历的就是前台生存期,活动总是出于运行状态,此时活动是可以和用户进行交互的。
    为了帮助更好的理解,下面提供一张activity生命周期的示意图:
    在这里插入图片描述
    下面直接上代码 演示一下生命周期,参考上图,应该就可以很好的理解了。
    首先我们需要创建三个活动,一个主活动mainactivity、一个正常的页面活动normalactivity、一个对话框形式的活动。
    主活动界面如下所示:有两个按钮,第一个start normal activity是打开normal活动界面,第二个start dialog activity是打开dialog活动界面。
    在这里插入图片描述
    normal活动界面如下所示:
    在这里插入图片描述
    dialog活动界面如下所示:表现为对话框形式
    在这里插入图片描述
    在mainactivity界面添加如下代码:用于检测生命周期的活动迹象
package com.example.activitylifecycle;

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 BaseActivity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: ");
        //绑定事件
        final Button button_normal = (Button)findViewById(R.id.button_normal);
        Button button_dialog = (Button)findViewById(R.id.button_dialog);
        button_normal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);
            }
        });
        button_dialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();a
        Log.d(TAG, "onRestart: ");
    }
}

首先我们打开app,首先打开的时主界面
这个时候log打印出了
在这里插入图片描述
可以看到,执行顺序为onCreat→onStart→onResume

我现在点击第一个按钮,打开normal活动界面
在这里插入图片描述
这时候加载新的活动,所以mainactivity 就执行了 onPause→onStop

我们在点击返回
在这里插入图片描述
这时候发现重启了 mainactivity 执行路线为 onRestart→onStart→onResume

我们现在点击第二个按钮,进入对话活动

在这里插入图片描述
这时候我们发现 mainactivity只是进入了pause状态 ,并没有调用onStop方法。

这时候我们在次点击返回
在这里插入图片描述
这时候发现 直接就调用了 onResume()方法。

在次点击返回 退出程序
在这里插入图片描述
这时我们发现 在stop之后 又调用了 destroy方法。
好了,这就是android的完整的生命周期了。

猜你喜欢

转载自blog.csdn.net/weixin_44235109/article/details/107600938