zoukankan      html  css  js  c++  java
  • Activity的简单整理

          Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的。

    一、Android中的MVC设计模式:

    这是我在查阅Activity的相关资料是看到关于介绍MVC设计模式在Android开发中的简单介绍:
           M(Model 模型):Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层与JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同一个包中,可以分开放,但它们统称为Model层)。
           V(View 视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一可以看到的一层,接收用户输入,显示处理结果;在Android应用中一般采用XML文件里德界面的描述,使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。
           C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,尽量能过activity交割Model业务逻辑层处理。
          了解了Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。

    二、Activity的生命周期:(这是一张网络上经典的流程图)

          创建一个activity,必须创建一个Activity的子类(或者一个Activity的子类的子类)。在子类中,需要实现系统回调的回调方法,当activity在它的生命周期的多种状态中转换的时候,例如当activity被创建、停止、恢复或摧毁。两个最重要的回调方法是:

    ——onCreate():必须实现这个方法。系统调用它当创建activity的时候。在实现的过程中,初始化activity的基本的组件。更重要的是,这里是必须调用setContentView()来定义activity用户接口的地方。

    ——onPause():系统调用这个方法当用户离开activity(虽然不总是意味着activity被摧毁)。常此时需要完成保存数据的工作以便用户后面回到Activity以恢复之前的状态。

     1 public class MainActivity extends Activity {
     2 
     3     //当第一次调用一个Activity就会执行onCreate方法
     4     //在这里创建界面,做一些关于数据初始化的工作
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.activity_main);
     9     }
    10     //当Activity处于可见不可交互状态的时候就会调用onStart方法
    11     @Override
    12     protected void onStart() {
    13         // TODO Auto-generated method stub
    14         super.onStart();
    15     }
    16     //当Activity可以得到用户焦点的时候就会调用onResume方法
    17     @Override
    18     protected void onResume() {
    19         // TODO Auto-generated method stub
    20         super.onResume();
    21     }
    22     //当Activity没有被销毁的时候重新调用这个Activity就会调用onRestart方法
    23     //
    24     @Override
    25     protected void onRestart() {
    26         // TODO Auto-generated method stub
    27         super.onRestart();
    28     }
    29     //当Activity被遮挡住的时候就会调用onPause方法
    30     //这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情。应该在这里保存一些数据,因为这个时候程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在onResume里读出来。
    31     @Override
    32     protected void onPause() {
    33         // TODO Auto-generated method stub
    34         super.onPause();
    35     }
    36     //当Activity处于不可见状态的时候就会调用onStop方法
    37     @Override
    38     protected void onStop() {
    39         // TODO Auto-generated method stub
    40         super.onStop();
    41     }
    42     //当Activity被销毁时会调用onDestory方法
    43     @Override
    44     protected void onDestroy() {
    45         // TODO Auto-generated method stub
    46         super.onDestroy();
    47     }
    48 
    49     @Override
    50     public boolean onCreateOptionsMenu(Menu menu) {
    51         // Inflate the menu; this adds items to the action bar if it is present.
    52         getMenuInflater().inflate(R.menu.main, menu);
    53         return true;
    54     }
    55 
    56 }
    View Code

          Activity中上面的七个方法代表了Activity生命周期的七个阶段,其中当Activity第一次被创建的时候会执行onCreate方法,而当Activity创建完后并且展示给用户的时候会调用onStart方法,接着如果该Activity获得焦点将会由Android系统调用该Activity的onResume方法,接下来,如果该Activity执行了另外一个Activity,那么上一个Activity的onPause方法会被调用以执行一些资源的释放操作,接下来执行新的Activity的onCreate,onStart以及onResume方法,如果新建的Activity完全覆盖了原来的Activity,那么原来Activity的stop方法将会被调用。而当从新建的Activity中会到原来的Activity时onRestart方法会被调用,并连续执行onStart()以及onResume(),此时不会再执行onCreate(),因为该Activity并未被销毁,如果在Activity中执行了finish()或者Android系统需要回收资源时可能会执行Activity的onDestroy()。

          注意,在Activity的执行过程中,存在一个Task的概念,Task其实就是一个Activity栈,先进后出,其中首先执行的Activity入栈,接下来执行的Activity继续入栈,如果Activity执行了finish(),将不会被放入Task栈中,新的Activity入栈的时候,上一个Activity会执行onPause(),接下来是刚入栈的Activity的onCreate,onStart,onResume方法,接下来可能会执行上一个Activity的onStop方法,当从Task栈中弹出Activity的时候,会首先执行上一个弹出的Activity的onPause(),接着执行当前Activity的onRestart(),onStart()以及onResume(),再执行上一个弹出的Activity的onStop()以及onDestroy()。弹出的Activity若要再次被执行,即进入Task栈,需要再次执行onCreate来创建它,因为此时它已经被销毁,不能再onRestart了。

    三、Activity栈

          Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。

    四、Activity的四种启动模式

    (1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈。

    (2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例。

    (3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop。

    (4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例。

    五、多个Activity之间的数据传递

          Activity之间可以传递数据,而且Activity不仅仅必须在同一个应用程序内,也可以在不同的应用程序之间。使用startActivity(Intent intent)来执行另外一个Activity,其中intent是很关键的,它象征了请求,其中包含了请求执行的动作,携带的数据等等信息。

  • 相关阅读:
    MySQL灾备切换
    crontab 定时任务
    Mysql常用命令 详细整理版
    linux 常用命令
    shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
    linux端口详解大全
    编译安装php5.6
    linux给用户添加sudo权限
    Effective C#(二)
    Effective C#(一)
  • 原文地址:https://www.cnblogs.com/laidandan/p/4727716.html
Copyright © 2011-2022 走看看