Android四大组件之Activity组件

本文详细介绍了Android中Activity的生命周期,包括完整的生命周期、可视生命周期及前台生命周期,并解释了四种不同的启动模式及其应用场景。

一,概述

毫无疑问,Activity一定是Android四大组件中最最重要的组件,也是每个Android开发者最先接触的组件。今天自己就写一篇关于Activity组件的博客,其它三个组件也会在后续写在博客上。

二,Activity的生命周期

先贴一张Activity的生命周期图,这张图来自Android SDK。


其实我们开发者接触最多的就是onCreate()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestroy()就是这六个方法了,这六个方法也称为Activity的完整生命周期,正常情况下就是按照这种顺序执行。贴一段代码,代码中对每个方法的作用都做了注释,代码如下:

package com.bighuan.review;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static String TAG = "MainActivity";

    /**
     * 每个Activity的入口,加载资源,做一些初始化操作
     *
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate()方法执行了");
        setContentView(R.layout.activity_main);
    }

    /**
     * 界面由不可见到可见
     */
    @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()方法执行了");
    }

    /**
     * 销毁当前Activity(界面),可在这个方法做一些资源释放的操作
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy()方法执行了");
    }

 }
当我们第一次进入这个Activity时,控制台打印了如下日志:

03-11 13:26:28.045 2383-2383/com.bighuan.review D/MainActivity: onCreate()方法执行了
03-11 13:26:28.120 2383-2383/com.bighuan.review D/MainActivity: onStart()方法执行了
03-11 13:26:28.120 2383-2383/com.bighuan.review D/MainActivity: onResume()方法执行了
可以看到当我们进入前面三个方法执行,而当我们退出这个Activity时呢?

03-11 13:29:36.819 2383-2383/com.bighuan.review D/MainActivity: onPause()方法执行了
03-11 13:29:36.887 2383-2383/com.bighuan.review D/MainActivity: onStop()方法执行了
03-11 13:29:36.887 2383-2383/com.bighuan.review D/MainActivity: onDestroy()方法执行了

这时执行了后三个方法,到此就验证了我们的完整生命周期。

三,Activity生命周期的分类

1,完整生命周期(entire lifetime):onCreate()-->onStart()-->onResume()-->onPause-->onStop-->onDestroy()。

2,可视生命周期(visible lifetime):onStart()-->onResume()-->onPause-->onStop。

3,前台生命周期(foreground lifetime):onResume()-->onPause。

四,Activity的四种启动模式

1,启动模式之standard, 默认标准的启动模式。

绝大多数的Activity都是采用的standard的启动模式,开启新的Activity,这个Activity就会被加载到任务栈的栈顶。返回退出Activity,就从任务栈里面移除。如果任务栈清空,应用程序退出。
应用场景:绝大多数默认的情况。

2,启动模式之singleTop。

顶部只有一个实例存在,如果这个Activity的实例已经被加入到任务栈的栈顶,这个Activity就不会被重新创建。
应用场景:一个界面避免重复的开启很多次。singletop。 浏览器的书签

3,启动模式之singleTask。

单一任务栈: 在任务栈里面只可以有1个实例存在
如果没有实例,就创建,加入到任务栈的栈顶;如果有实例已经存在,就直接复用这个实例,然后清空这个实例上面所有的Activity。
应用场景: 如果一个Activity的内存开销或者是cpu开销非常大。一般我们设置这个Activity为singletask的启动模式。保证任务栈里面只有一个实例存在。浏览器的BrowserActivity内存开销非常大。webkit 浏览器的内核。 解析html标签。解析css标签。JavaScript解析引擎。

4,启动模式之singleinstance。

前面的3种启动模式Activity都是运行在当前的应用程序默认任务栈里面。singleinstance 则是自己单独开启一个任务栈运行。在自己的单独的任务栈里面运行,整个手机操作系统里面只可能同时存在一个singleinstance实例的Activity。
应用场景: 有道词典,快速取词,通话界面。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值