zoukankan      html  css  js  c++  java
  • Android

    1.Activity栈

      每一个Activity的状态是由它在Activity栈中所处的位置所决定的,Activity栈是当前所有正在运行的Activity的后进先出的集合。当一个新的Activity启动时,它就变为Activity状态,并被移动到栈顶。如果用户使用back按钮返回到了刚才的Activity,或者前台Activity被关闭了,那么栈中的下一个Activity就会移动到栈顶,变为活动状态。

      

    (Android - 应用程序的优先级和进程状态)应用程序的优先级受其最高优先级的Activity的影响。当Android的内存管理器决定终止哪个应用程序来释放资源时,它会使用这个栈来决定应用程序的优先级.

    2.Activity的状态

      随着Activity的创建和销毁,他们会按照上图那样,从栈中移进移出。在这个过程中,他们也经历了4中可能的状态(活动状态、暂停状态、停止状态、非活动状态)

      1)活动状态:当一个Activity位于栈顶的时候,它是可见的、具有焦点的前台Activity,这时它可以接收用户输入。Android将会不惜一切代价来保持它处于活动状态,并根据需要来销毁栈下面部门的Activity,以保证这个Activity拥有它所需要的资源。当另一个Activity变为活动状态时,这个Activity就将被暂停。

      2)暂停状态:在某些情况下,Activity是可见的,但是没有获得焦点,此时它就处于暂停状态。当一个透明的或者非全屏的Activity位于该Activity之前时,就会达到这个状态。当Activity被暂停的时候,它仍然会被当作近似活动状态的状态,但是它不能接收用户的输入事件。在极端情况下,Android会终止暂停的Activity,以便为活动状态的Activity释放资源。当一个Activity变得完全不可见的时候,它就会变为停止状态。

      3)停止状态:当一个Activity不可见的时候,它就处于停止状态。此时,Activity仍然会停留在内存中,保存所有的状态信息,然而当系统的其它地方要求使用内存的时候,它们就会成为被终止的首要候选对象。在一个Activity停止的时候,保存数据和当前的UI状态以及停止任何非关键操作时很重要的。一旦一个Activity被退出或者关闭,它就会变为飞活动的状态

      4)非活动状态:当一个Activity被终止之后,在启动之前它就处于非活动状态。处于非活动状态的Activity已经从Activity栈中移除了,因此,在它们可以被显示和使用之前,需要被重新启动。

    注:状态转化是非确定性的,完全由Android内存管理器处理。Android首先会关闭包含非活动状态的Activity的应用程序,接着会关闭那些停止的应用程序。只有在极端情况下,它才会移除那些被暂停的应用程序。
    

    3.监控状态改变

      为了保证Activity可以对状态改变作出反应,Android提供了一些列时间 处理程序,当Activity在完整的、可见的和活动的生存期之间转化时,他们就会被触发。

     

     1 package com.niangcool.feel;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 
     6 /**
     7  * @Title: MyStatuChangeActivity.java 
     8  * @Package com.niangcool.feel 
     9  * @Description: TODO
    10  * @author Brant Liu  lbf1988@qq.com
    11  * @date 2015-10-10 下午3:41:18 
    12  * @version V1.0 
    13  */
    14 public class MyStatuChangeActivity extends Activity{
    15     /**
    16      * 在完整生命周期开始时调用
    17      * */
    18     @Override
    19     public void onCreate(Bundle savedInstanceState){
    20         super.onCreate(savedInstanceState);
    21     }
    22     /**
    23      * 在onCreate方法完成后调用,用于恢复UI状态
    24      * */
    25     @Override
    26     public void onRestoreInstanceState(Bundle savedInstanceState){
    27         super.onRestoreInstanceState(savedInstanceState);
    28         //从savedInstanceState恢复UI状态
    29         //这个bundle也被传递给了onCreate
    30         //自Activity上次可见之后,只有当系统终止了该Activity时,才会被调用
    31         
    32         //在随后的Activity进程的onRestart可见生存期之前调用
    33     }
    34     
    35     @Override
    36     public void onRestart(){
    37         super.onRestart();
    38         //加装载改变,知道Activity在此进程中已经可见
    39     }
    40     
    41     /**
    42      * 在可见生存期的开始时调用
    43      * */
    44     @Override
    45     public void onStart(){
    46         super.onStart();
    47         //既然Activity可见,就应用任何要求的UI Change
    48     }
    49     /**
    50      * 在Activity状态生存期开始时调用
    51      * */
    52     @Override
    53     public void onResume(){
    54         super.onResume();
    55         //恢复Activity需要,但是当它处于不活动状态时被挂起的暂停的UI更新、线程或进程
    56         //在Activity状态生命周期结束的时候调用,用来保存UI状态的改变
    57     }
    58     
    59     /**
    60      * 把UI状态改变保存到saveInstanceState
    61      * */
    62     @Override
    63     public void onSaveInstanceState(Bundle savedInstanceState){
    64         //如果进程被运行时终止并被重启,那么这个Bundle将被传递给onCreate和onRestoreInstanceState
    65         super.onSaveInstanceState(savedInstanceState);
    66     }
    67     
    68     /**
    69      * 在Activity状态生存期结束时调用
    70      * */
    71     @Override
    72     public void onPause(){
    73         //挂起不需要更新的UI更新、线程或者CPU密集的进程
    74         //当Activity不是前台的活动状态的Activity时
    75         super.onPause();
    76     }
    77     
    78     /**
    79      * 在可见生存期结束时调用
    80      * */
    81     @Override
    82     public void onStop(){
    83         //挂起不需要的UI更新、线程或处理,当Activity不可见时,保存所有的编辑或者状态改变,因为在调用这个方法后,进程可能会被终止
    84         super.onStop();
    85     }
    86     /**
    87      * 在完整生存期结束时调用
    88      * */
    89     @Override
    90     public void onDestroy(){
    91         //清理所有的资源,包括结束线程、关闭数据库连接等
    92         super.onDestroy();
    93     }
    94 }

      在一个Activity从创建到销毁的完整的生命周期内,它会经理活动生存期和可见生存期的一次或者多次重复。每一次转化都会触发前面所描述的方法处理程序。

    ------------------------------
    Brant Liu

    lbf1988@qq.com

    有梦想的码农
  • 相关阅读:
    第一次团队作业
    第二次结对作业
    动态代理与AOP
    笔试题
    java并发面试题(带答案)
    线程问题——同步和死锁
    java线程的方法
    java实现多线程的方法
    使用java闭锁实现并发
    Java多线程——同步问题
  • 原文地址:https://www.cnblogs.com/brantliu/p/4867349.html
Copyright © 2011-2022 走看看