zoukankan      html  css  js  c++  java
  • Acticity的生命周期和启动模式

    典型情况下的生命周期

    Paste_Image.png

    onCreate
    表示创建Acticity,在这个方法中可以做一些初始化的操作,如加载界面布局资源,初始化Activity所需的数据

    onRestart
    表示重新启动Activity,正常情况下,当前Activity从不见到可见,就会调用此方法。

    onStart
    表示启动Acticity,这个时候Activity可见,但是不能进行UI交互。

    onResume
    表示Activity出现到前台,可与之交互。

    onPause
    表示Activity正在暂停,接着会执行onStop。这个方法中可以做一些数据存储,停止动画,但不能耗时操作,不然Activity之间的切换会有卡顿,不自然。

    onStop
    表示Activity马上就会停止,可以做一些稍微耗时的回收工作。

    onDestroy
    表示Activity即将销毁,在这个方法中做一些回收工作和资源的释放。

    两个Acticity之间切换的生命周期:第一个Activity执行onPause后,第二个Activity执行onCreate -> onStart ->onResume,第一个Activity再执行onStop。

    异常情况下的生命周期

    1、资源相关的系统配置发生改变导致Activity被杀死并重新创建:
    正常周期依旧会被调用,但是会调用onSaveInstanceState,当重新创建后会调用onRestoreInstanceState,我们可以利用这个特性来保存恢复数据。

    2、资源不足导致低优先级的Activity被杀死:

    • 前台Activty -- 正在和用户交互的Activity,优先级最高
    • 可见但非前台Activity
    • 后台Activity -- 已经被暂停的Activity,比如执行的onStop,优先级最低。

    为了防止被系统杀死,后台工作一般放在Service中执行,防止系统轻易杀死。

    Activity启动模式

    当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中。Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置。

    1.Standard模式(默认)
    我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的实例,退出Activity则会在任务栈中销毁该实例。

    2.SingleTop模式
    这种模式会考虑当前要激活的Activity实例在任务栈中是否正处于栈顶,如果处于栈顶则无需重新创建新的实例,会重用已存在的实例,否则会在任务栈中创建新的实例。

    3.SingleTask模式
    如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除,调用该实例的newInstance()方法重用该Activity,使该实例处於栈顶位置,否则就重新创建一个新的Activity实例。

    4.SingleInstance模式
    当该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中,即只要激活的是该类型的Activity,都会通过调用实例的newInstance()方法重用该Activity,此时使用的都是同一个Activity实例,它都会处于任务栈的栈顶。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。

  • 相关阅读:
    leetcode_138复制带随机指针的链表
    minSTL
    LLVM
    STL基础_迭代器
    mysql数据库表清空后id如何从1开始自增
    explain用法和结果分析
    MySQL多表查询与子查询
    数据结构与算法笔记
    MySQL数据库的SQL语言与视图
    mysql忘记密码解决方案
  • 原文地址:https://www.cnblogs.com/fengwei23/p/9274411.html
Copyright © 2011-2022 走看看