Android-Activity的生命周期

1.Activity的生命周期

周期即活动从开始到结束所经历的各种状态。生命周期即活动从开始到结束所经历的各个状态。从一个状态到另一个状态的转变,从无到有再到无,这样一个过程中所经历的状态就叫做生命周期。


2.生命周期的四种活动状态

  • 运行状态:当一个活动位于一个返回栈的栈顶时,这时候的活动就位于运行状态
  • 暂停状态:当一个活动不再位于一个返回栈的栈顶时,但任然可见时,这是的活动就位于暂停状态
  • 停止状态:如果一个活动被另一个全屏活动完全覆盖,那么该活动处于停止状态
  • 销毁状态:当一个活动从返回栈移除时,那么该活动就处于销毁的状态

3..正常情况下的生命周期(Activity类中定义的7中回调方法)

  1. onCreate():该方法是在Activity被创建时回调,它是生命周期第一个调用的方法,我们在创建Activity时一般都需要重写该方法,然后在该方法中做一些初始化的操作。
  2. onStart():该方法在活动由不可见变为可见是调用。
  3. onResume():该方法在活动可与用户交互时被调用,此时活动一定位于返回栈的栈顶并且处于运行状态。
  4. onPause():此方法被回调时则表示Activity正在停止(Paused形态),一般情况下onStop方法会紧接着被回调
  5. onStop():这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
  6. onDestroy():这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
  7. onRestart():这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。

    活动生命周期的运行流程

这里写图片描述

4.生命周期的实例演示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.dfcn.myapplication.MainActivity"
    android:orientation="vertical">
<Button
    android:id="@+id/b1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="启动"/>
    <Button
        android:id="@+id/b2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="关闭"/>
</LinearLayout>

package com.example.dfcn.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private static final String TAG ="a" ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1,b2;
        b1=findViewById(R.id.b1);
        b2=findViewById(R.id.b2);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.b1:
                Intent intent=new Intent(this,ChatActivity.class);
                break;
            case R.id.b2:
                onStop();
                break;
        }
    }

    @Override
    /**
     * activity从后台重新回到前台(由不可见变为可见)时被调用
     */
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: " );
    }

    @Override
    /**
     * Activity准备好和用户进行交互的时候被调用
     */
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    @Override
    /**
     * Activity准备去启动或者恢复另一个Activity的时候调用
     */
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    /**
     * 退出当前Activity或者跳转到新Activity时被调用,Activity完全不可见的时候调用
     */
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    /**
     * 退出当前Activity时被调用,调用之后Activity就结束了
     */
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    /***
     * Activity从后台重新回到前台时被调用
     */
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }
}

//。。。由于截图太过麻烦,在这里我就不截图了
当程序运行时logcat
06-04 11:01:14.525 31640-31640/? D/a: onStart:
06-04 11:01:14.525 31640-31640/? D/a: onResume:
我们在Activity创建完成后,点击Home回调主界面时,可以发现此时onPause方法和onStop方法被执行,也就是点击Home键回到主界面(Activity不可见)–>onPause()–>onStop()依次被调用

我们可以发现重新回到Activity时,调用了onRestart方法,onStart方法,onResume方法。因此,
当我们再次回到原Activity时–>onRestart()–>onStart()–>onResume()依次被调用

在原Activity的基础上开启新的Activity,原Activity生命周期执行方法顺序为–>onPause()–>onStop()

5.总结
小结:到这里我们来个小结,当Activity启动时,依次会调用onCreate(),onStart(),onResume(),而当Activity退居后台时(不可见,点击Home或者被新的Activity完全覆盖),onPause()和onStop()会依次被调用。当Activity重新回到前台(从桌面回到原Activity或者被覆盖后又回到原Activity)时,onRestart(),onStart(),onResume()会依次被调用。当Activity退出销毁时(点击back键),onPause(),onStop(),onDestroy()会依次被调用,到此Activity的整个生命周期方法回调完成。现在我们再回头看看之前的流程图,应该是相当清晰了吧。嗯,这就是Activity整个典型的生命周期过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值