zoukankan      html  css  js  c++  java
  • 1.Activity



    Activity生命周期

    一、如何创建Activity(活动)
    1.Activity(活动):
    2.新建一个类继承自Activity(活动)

    二、Activity(活动)的声明周期从创建到销毁的过程所要执行的方法
    1.创建Activity(活动)所要执行的方法
    a.onCreate()
    这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动
    第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布
    局、绑定事件等。
    b.onStart()
    这个方法在活动由不可见变为可见的时候调用。
    c.onResume()
    这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的
    栈顶,并且处于运行状态。
    2.Activity(活动)被销毁时所执行的方法
    a.onPause()
    这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方
    法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度
    一定要快,不然会影响到新的栈顶活动的使用。
    b.onStop()
    这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如
    果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()
    方法并不会执行。
    c.onDestroy()
    这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
    3.onRestart()
    这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

    三、生命周期的分类
    1. 完整生存期
    活动在 onCreate()方法和 onDestroy()方法之间所经历的,就是完整生存期。一般情
    况下,一个活动会在 onCreate()方法中完成各种初始化操作,而在 onDestroy()方法中完
    成释放内存的操作。
    2. 可见生存期
    活动在 onStart()方法和 onStop()方法之间所经历的,就是可见生存期。在可见生存
    期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两
    个方法,合理地管理那些对用户可见的资源。比如在 onStart()方法中对资源进行加载,
    而在 onStop()方法中对资源进行释放, 从而保证处于停止状态的活动不会占用过多内存。
    3. 前台生存期
    活动在 onResume()方法和 onPause()方法之间所经历的,就是前台生存期。在前台
    生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行相互的,我们平时
    看到和接触最多的也这个状态下的活动。
    四.活动的注册


    2.Activity的四种启动模式

    一、Activity(活动)的管理模式
    Android采用Task来管理多个Activity。当启动一个APP时,Android就会为之创建一个Task,然后每启动一个activity,则把当前的activity压到栈顶。比如以此启动页面A->B->C,栈里面的结构如下所示
    C------栈顶
    B
    A------栈底
    按返回键的时候,从栈顶弹出页面依次为C->B->A

    二、Activity(活动)的四种启动模式
    1.standard模式
    它是活动默认的启动模式,在不进行显示制定的情况下,所有活动都会自动使用这种启动模式。每次通过此模式来启动activity时,Android总会为目标activity启动一个新的实例。
    举个例子:activity A为standard模式,activity B为standard模式,activity C为standard模式,从A->B->C依次启动activity:
    C为栈顶
    B
    A为栈低
    按返回键的时候,从栈顶弹出页面依次为C->B->A

    2.singleTop模式
    I.比如Activity B启动模式为singleTop,Activity A为standard,此时从A页面跳转B页面,A->B时,会先在栈中查看栈顶是否存在B,存在的话,则复用栈顶B,调用onNewIntent方法,而不是重新new一个新的B。如果栈中不存在B,则会创建B。
    II.再继续从B页面跳转B页面的时候,及A->B->B时,因为栈顶已经存在B了,则直接复用栈顶的B,调用onNewIntent方法,此时栈如下所示:
    B------栈顶
    A------栈底

    3.singleTask模式
    使用这种加载模式的activity在同一个Task内只有一个实例,当系统采用此singleTask模式启动activity时,可以分为三种情况:
    a. 如果将要启动的activity不存在,系统将会创建目标activity实例,并将它加入到Task栈顶。
    b.如果将要启动的activity已经位于Task栈顶,此时与singleTop模式的行为相同。
    c. 如果将要启动的activity已经存在,但没有位于Task栈顶,系统将会把位于该activity上面的所有activity移出Task栈,从而使得目标activity转入栈顶。

    4.singleInstance模式
    假设我们的程序中有一个活动是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个活动的实例,应该如何实现呢?
    使用前面三种启动模式肯定是做不到的,因为每个应用程序都会有自己的返回栈,同一个活动在不同的返回栈中入栈时必然是创建了新的实例。而使用singleInstance 模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。
    此加载模式下,无论从哪个Task中启动目标activity,只会创建一个目标activity实例,并会使用一个全新的Task栈来装载该activity实例。当系统采用singleInstance模式启动activity时,可以分为两种情况:
    a.如果将要启动的activity不存在,系统会先创建一个全新的Task、再创建目标activity的实例,并将它加入新的Task的栈顶。
    b. 如果将要启动的activity已经存在,无论它位于哪个应用程序中,无论它位于哪个Task中,系统将会把该activity所在的Task转到前台,从而使用该activity显示出来。

    activity-singleInstance模式:

    activity-SingleTask模式:

     

    activity-singleTop模式:

     

    activity-standard模式

     

  • 相关阅读:
    【读书笔记】 —— 《数学女孩》
    【读书笔记】 —— 《数学女孩》
    《论语》《大学》《中庸》和孟子
    《论语》《大学》《中庸》和孟子
    零点定理、介值定理
    java学习笔记(3)——面向对象
    linux下的文件操作——批量重命名
    Java学习笔记(4)——JavaSE
    java学习笔记(5)——内部类
    学生管理系统调试——实时错误(实时错误“424”“5”“91”)
  • 原文地址:https://www.cnblogs.com/juham/p/15086402.html
Copyright © 2011-2022 走看看