Android四大组件之Activity生命周期

原文:https://bafanglvren.ink/archives/82/

首先看到Google官方的一张图

生命周期.png

Activity的7个自带方法完成了生命周期的大致过程

onCreate();
onStart();
onResume();
onPause();
onStop();
onRestart();
onDestroy();

其中除了onCreate()会在创建项目时自动重写,其余的方法都需要我们手动重写,对此,在日志中记录下每个方法被调用时的情况。

package com.example.lifecycle;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    String TAG = "myTag";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: ");
    }

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

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

    @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();
        Log.d(TAG, "onRestart: ");
    }
}

当程序启动时->调用onCreate()方法,使这个Activity初始化数据。
接着调用onStart()方法,使Activity出现在设备屏幕上。
再调用onResume()方法,使Activity可以接受用户的操作,如滑动,单击等。
此时Activity处于一个正常的前台状态,用户可以对其进行操作并得到反馈。
image.png

当用户返回主界面,系统调用了onPause()和onStop()方法。此时程序还在后台,所以并不会调用onDestroy();
image.png

当重新回到app时,因为之前已经调用过onCreate方法。所以程序直接从onRestart()方法开始走->onStart()->onResume()->活动状态。
image.png

当用户按返回键退出程序时,系统调用onDestroy()方法,但是如果用户从任务管理器关闭app却不会调用onDestroy()方法。

旋转屏幕时也会调用onDestroy()方法

手动旋转手机屏幕可以看到:
旋转前:正常的启动流程
旋转后:重新调用了onCreate()方法

由此可见,安卓的旋转机制是先把当前的画面(竖屏)关闭再重新加载一遍画面(横屏)。由此在对app适配旋转时要额外注意数据的保存。

测试设备环境:

版本: Android 9.0
系统:PixelExperience

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值