• Android——活动的生命周期与启动模式


    生命周期:

    原:http://blog.csdn.net/w709835509/article/details/7655240

     1 import android.app.Activity;
     2 import android.os.Bundle;
     3 
     4 public class MainActivity extends Activity {
     5     // 在这里进行初始化操作,如界面加载与事件绑定
     6     @Override
     7     public void onCreate(Bundle savedInstanceState) {
     8         super.onCreate(savedInstanceState);
     9         if (savedInstanceState != null) {
    10             // 恢复临时数据
    11             String tempData = savedInstanceState.getString("key");
    12             // ...
    13         }
    14     }
    15 
    16     // 在这里保存临时数据
    17     @Override
    18     public void onSaveInstanceState(Bundle outState) {
    19         super.onSaveInstanceState(outState);
    20         // 设活动A->B,A处于停止状态,可能被系统回收,此时在Back键,依然会回到A,但是会调用A的onCreate方法而不是onRestart,临时数据将不再存在,如界面数据
    21         // 通过Bundle这个参数,可以将临时数据保存,各种put...;当A再被创建时,可以取出Bundle存的数据,进行相关操作,如上:
    22         String tempData = "this is  temp data";
    23         outState.putString("key", tempData);
    24     }
    25 
    26     // 重启调用,由停止状态变为运行状态
    27     @Override
    28     public void onRestart() {
    29         super.onRestart();
    30         // 当知道这个进程中的活动已经可见之后,载入改变
    31     }
    32 
    33     // 在可见生存期开始时调用
    34     @Override
    35     public void onStart() {
    36         super.onStart();
    37     }
    38 
    39     // 活动已准备好和用户交互——在返回栈栈顶
    40     @Override
    41     public void onResume() {
    42         super.onResume();
    43         // 据说:恢复活动所需要的任何暂停的UI更新、线程或者进程,但是当不活动的时候,就挂起它们
    44     }
    45 
    46     // 活动暂停时,活动依然可见,如此时弹出对话框,活动就处于暂停
    47     @Override
    48     public void onPause() {
    49         // 据说:当活动不是前台的活动状态的活动时,挂起不需要更新的UI更新、线程或者CPU密集的进程。
    50         super.onPause();
    51         // 即释放CPU资源,保存关键数据,但是动作一定得快,否则影响新栈顶活动
    52     }
    53 
    54     // 活动完全不可见
    55     @Override
    56     public void onStop() {
    57         // 据说:当进程不可见的时候,挂起不需要的剩下的UI更新、线程或者处理,保存所有的编辑或者
    58         // 状态改变,因为这个进程可能会被销毁(从而为其他进程释资源)
    59         super.onStop();
    60     }
    61 
    62     // 在完整生存期结束时调用
    63     @Override
    64     public void onDestroy() {
    65         // 清空所有的资源,包括结束线程、关闭数据库连接等。
    66         super.onDestroy();
    67     }
    68 
    69 }

     活动的四种启动模式:

     目前一直没用到过这个启动模式,简单总结一下,以备后用

    启动模式需要在Manifest中注册,在Activity中增加一项launchMode,如:android:launchMode = "singleTop"

    主要是指定Android管理返回栈时如何对已经存在的活动进行控制

    1.standard:默认如此

      每次启动活动时,都会创建一个新的活动,无论返回栈中是否存在该活动

    2.singleTop

      启动活动时,当且仅当活动在栈顶,此时会直接调用该活动而不重新创建

    3.singleTask

      启动活动时,如果返回栈中存在这个活动的实例,这个活动之上的所有活动将被出栈,只剩下这一个任务!否则才创建新实例

    4.singleInstance

      目的:不同程序之间共享活动

      前三者做不到的原因:每个程序会有自己的返回栈,同一个活动在另一个返回栈入栈时,必然是创建了一个新的实例!

      单例模式下,会用一个单独的返回栈管理这个活动,无论是哪个程序来访问这个活动,都会共用该返回栈,从而共享!

  • 相关阅读:
    Spring核心思想:IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程)
    synchronized 与 lock锁的异同
    SpringMVC工作流程
    close()和flush()的区别
    MySQL—索引(Index)
    MySQL—事务(ACID)
    MySQL—存储引擎
    周学习笔记(16)——大三下
    周学习笔记(15)——大三下
    周学习笔记(14)——大三下
  • 原文地址:https://www.cnblogs.com/erhai/p/4987460.html
Copyright © 2020-2023  润新知