且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Android群英传笔记——第八章:Activity与Activity调用栈分析

更新时间:2021-10-03 22:57:16

Android群英传笔记——第八章:Activity与Activity调用栈分析


开篇,我们陈述一下Activity,Activity是整个应用用户交互的核心组件,了解Activity的工作模式,生命周期和管理方式,是了解Android的基础,本节主讲

  • Activity的生命周期与工作模式
  • Activity调用栈管理

一.Activity

Activity作为四大组建出现平率最高的组件,我们在哪里都能看到他,就让我们一起先来了解一下他的生命周期

1.起源

Activity是用户交互的第一接口,他提供了一个用户完成指令的窗口,当开发者创建Activity之后,通过调用setContentView来指定一个窗口界面,并以此为基础,提供给用户交互的接口,系统采用Activity栈的方式来管理Activity

2. Activity形态

Activity一个最大的特点就是拥有多种形态,他可以在多种形态中***切换,以此来控制自己的生命周期

  • Activity/Running

这个时候,Activity处于Activity栈的最顶层,可见,并与用户进行交互

  • Paused

Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转换成了qaused形态,他是去了与用户交互的能力,所有状态信息,成员变量都还保留着,只有在系统内存极地的情况下,才会被系统回收

  • Stopped

如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入stop形态,此时他不在可见,但依然保留着所有的状态和成员变量

  • Killed

当Activity被系统回收或者Activity从来没有创建过,Activity就处于killed状态,

由此可见,用户的不同操作,会让Activity进入四种不同的状态,而开发者,只能控制其生,却不能控制其死

3.生命周期

Google给了我们一张图来表示Activity的生命周期,他希望Activity能被开发者所控制,而不是一匹脱缰的野马

Android群英传笔记——第八章:Activity与Activity调用栈分析

开发者必然不必实现所有的生命周期方法,但是必须知道每一个生命周期的含义,可以让我们更好的掌控Activity,让他能完成你所期望的效果

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

-1.Activity启动和销毁过程

在系统调用onCreate方法之后,就会马上调用onStart,然后继续调用onResume来进图运行状态,最后都会停在onResume状态,完成启动,系统会调用onDestroy来结束一个Activity的生命周期让他毁掉kill状态

以上就是一个Activity的启动和销毁的过程

  • onCreate中创建基本的UI元素
  • onPause和onStop:清除Acvtivity的资源,避免浪费
  • onDestroy:因为引用会在Activity销毁的时候销毁,而线程不会,所以清除开启的线程

-2.Activity的暂停和恢复过程

当栈顶的Activity部分不可见的时候,就会倒置Activity进入onPause

  • onPause:释放系统资源,
  • onResume:需要重新初始化onPause释放的资源

-3. Activity的停止过程

栈顶的Activity部分不可见的时候,实际上后续会有两种可能,从部分不可见到可见,也就是恢复过程,从部分不可见到完全不可见,也就是停止过程,系统在当前Activity不可见的时候调用onPause

-4.Activity的重新创建过程

最后我们来看看Activity是如何重新创建的,如果你的系统长时间处于stop的状态,而此时系统需要更多的内存或者系统内存比较紧张的时候,系统就会回收你的Activity,而系统为了补偿你,会将你的Activity状态通过onRestoreInstanceState()方法保存到Bundle中去,当然你也可以额外增加键值对去保存这些状态,当你重新需要创建这个Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstanceState()方法中去与onCreate方法中去,这也是onCreate的重要参数——saveInstanceState的来源

不过这里要注意的一点就是savedInstanceState方法并不是每次当Activity离开前台就会调用,如果用户使用finish方法结束,则不会调用,而且Android系统已经默认实现了控件的缓存状态,一次来减少开发者需要实现的缓存逻辑

二.Android任务栈简介

一个Android应用程序功能通常会被拆分为多个Activity,而各个Activity之间通过Intcnt进行连接,而Android系统,通过栈结构来保存整个App的Activity,栈底的元素是整个任务栈的发起者。一个合理的任务调度栈不仅是性能的保证, 更是提供性能的基础。

当一个App启动时,如果当前环境中不存在该App的任务栈,那么系统就会创建一个任务栈,这个app所启动的Activity都将在这个任务栈中被管理,这个栈也被称为Task