美文网首页理论
认识Activity

认识Activity

作者: 编程的猫 | 来源:发表于2020-03-09 18:01 被阅读0次
Activity是Android的四大组件之一,用来呈现视图的窗口
  • 生命周期

生命周期依次是:
onCreate,onStart,onResume,onPause,onStop,onDestroy。从创建到销毁,前后方法一一对应其中onResume可见并获取窗口的焦点,onPause可见失去焦点(不可出发Activity),其余方法都不可见。

  • 保存activity的状态:onSaveInstanceState()
    Activity的 onSaveInstanceState() 和onRestoreInstanceState()并不是生命周期方法,它们不同于onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
    在activity被杀掉之前调用保存每个实例的状态,以保证该状态可以在onCreate(Bundle)或者onRestoreInstanceState(Bundle)(传入的Bundle参数是由onSaveInstanceState封装好的)中恢复。这个方法在一个activity被杀死前调用,当该activity在将来某个时刻回来时可以恢复其先前状态。
  • 横竖屏切换生命周期的执行情况

当在manifest.xml的activity中没有配置configChanged时,切换屏幕会先销毁当前activity,然后重新加载activity;当在manifest.xml中配置configChanded=“orientation”时,不会调用activity各生命周期方法,会执行onConfigrationChanged方法

  • actiity A跳转activity B生命周期方法的执行是什么样的?

首先会执行A的onPause,接着执行B的onCreate,onStart,onResume,此时B已经覆盖A,A会执行onStop方法

  • Task栈
    1. Task栈是存储Activity的一种数据结构,原则是先进后出。
    2. 在应用程序创建之初,系统会默认分配给其一个任务栈(默认一个),并存储根Activity。
    3. 同一个Task Stack,只要不在栈顶,就是onStop状态
    4. 任务栈的id自增长型,是Integer类型
    5. 新创建Activity会被压入栈顶。点击back会将栈顶Activity弹出,并产生新的栈顶元素作为显示界面(onResume状态)。
    6. 当Task最后一个Activity被销毁时,对应的应用程序被关闭,清除Task栈,但是还会保留应用程序进程(狂点Back退出到Home界面后点击Menu会发现还有这个App的框框。个人理解应该是这个意思),再次点击进入应用会创建新的Task栈
  • Activity的affinity
    1. affinity是Activity内的一个属性(在ManiFest中对应属性为taskAffinity)。默认情况下,拥有相同affinity的Activity属于同一个Task中。
    2. Task也有affinity属性,它的affinity属性由根Activity(创建Task时第一个被压入栈的Activity)决定。
    3. 在默认情况下(我们什么都不设置),所有的Activity的affinity都从Application继承。也就是说Application同样有taskAffinity属性。
    4. Application默认的affinity属性为Manifest的包名。
  • Activity的启动模式
    • standard
      该模式可以被设定,Activity的默认模式就是standard。在该模式下,启动的Activity会依照启动顺序被依次压入Task中:
    • singleTop
      如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity,否则创建新的activity
      应用场景:开启渠道多,适合多应用开启调用的Activity:通过这种设置可以避免已经创建过的Activity被重复创建(多数通过动态设置使用,关于动态设置下面会详细介绍)
    • singleTask
      如果Task栈中又目标activity,则会将该activity之上的所有activity全部移除,自身将会置于栈顶获取焦点。如果没有则创建新的activity
      应用场景:程序主界面,我们肯定不希望主界面被多创建,而且在主界面退出的时候退出整个App是最好的设想。
    • singleInstance:
      在该模式下,我们会为目标Activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。新的Task有且只有这一个Activity实例。 如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态)

XML中设置启动模式都是静态设置,也可以通过动态代码设置。
参考博文(https://blog.csdn.net/zy_jibai/article/details/80587083
)

  • onNewInstance
    1. activity 启动模式设置成:singleTask、singleInstance
      Activity A-->Activity B,Activity B-->Activity A;
      在B跳转到A的时候,A会执行onNewInstance(),onRestart(),onStart(),onResume()
    2. activity 启动模式设置成:singleTask、singleInstance,singleTop
      Activity A-->Activity A
      A会执行:onPause(),onNewInstance(),onResume();
前提:ActivityA已经启动过,处于当前应用的Activity堆栈中;

当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法

当ActivityA的LaunchMode为SingleInstance,SingleTask时,如果已经ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法

当ActivityA的LaunchMode为Standard时,由于每次启动ActivityA都是启动新的实例,和原来启动的没关系,所以不会调用原来ActivityA的onNewIntent方法

相关文章

  • 认识Activity

    1. 简介 Activity是Android四大组件之一,为用户提供与系统交互的界面,每一个应用都有一个或者多个A...

  • 认识Activity

    Activity是Android的四大组件之一,用来呈现视图的窗口 生命周期 生命周期依次是:onCreate,o...

  • Android基础06-Activity及其生命周期

    一、Activity初步认识:【创建、配置、启动Activity】 (一)、创建Activity: 创建Activ...

  • Activity及其生命周期

    一、Activity初步认识:【创建、配置、启动Activity】 (一)、创建Activity: 创建Activ...

  • [02]——认识Activity

    1、Activity 在Android中所有用户看得到的页面,都是Activity。Activity是Androi...

  • Android Activity的生命周期

    Android Activity的生命周期 Activity类的继承关系图如下: 认识Activity的生命周期 ...

  • 认识“老朋友”Activity

    **重点:Android四大组件 重新认识Activity Activity Activity是一个应用程序组件,...

  • 重新认识Activity

    Activity是Android中最重要的组件之一,因为它是我们平时使用最频繁的、唯一可以直接和用户交互且对用户可...

  • Android基础知识—Activity

    一、认识Activity组件 Activity是Android 四大基本组件之一,可以通过 setContentV...

  • JetPack之ViewModel源码解析

    我们认识中的ViewModel是什么 Viewmodel其实就是activity中一个普通的实体。Activity...

网友评论

    本文标题:认识Activity

    本文链接:https://www.haomeiwen.com/subject/zigpdhtx.html