• Android之路-------Activity的详解


    前言

      由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字。

      今天LP的任务完成了,在领导还没分配任务之前再发布一篇关于Activity的博文..........

      上一篇跟大家分享了Android的发展史、系统框架、还有Android的四大组件,下面LP就为大家介绍下四大组件之一的Activity。

      知道了Android的历史之后,有没有让Android那种打不死的精神打动了,如果有的话就赶紧动身来学Android吧..

      行了,废话不多说     Let's go

    目录

    • 活动(Activity)
    • activity谁来管?
    • 它是怎么个生老病死的?
    • 启动模式
    • 如何去使用它?
    • 兄弟间该如何进行交互?

    Android四大组件之一【Activity】

      说到活动相信就算没有android基础的人都知道活动是个什么东西,因为它会经常出现在我们的身边,但是说到Activity,那就不一定了,不过懂一点英语的人直接翻译过来也知道是活动的意思,其实Android的活动和现实生活中的活动很相似,也可以理解为现实生活中的活动,我们正式开始吧。

      说到Android的Activity,它到底是个什么东西呢? 它就是Android系统中的一个组件,专门负责与用户交互的,用户看到的每一个界面就是一个活动。

      在Android中,Activity有基本的四种状态

        1.运行状态  active/running

            处于屏幕的最前端或者正在和用户交互着,称为运行状态/激活状态

        2.暂停状态  Paused

            当前activity失去焦点,被一个窗口或者非全屏的东西遮住一点点和被另一个透明的activity覆盖的时候,称为暂停状态

        3.停止状态  Stoped

            当前activity完全看不到了,称为停止状态

        4.杀死状态  Killed

            当activity处于“暂停状态” Or “停止状态”,这时候系统就可以对当前的activity从内存中删除或者终止它的进程,还有就是当系统内存不足的时候也会执行前者动作。

    看电影

    如果看完上面的还不能理解,那么你就可以理解为看电影,那部电影就是当前的activity. 

        1.电影正在播放的时候,称为运行状态

        2.当我们点击暂停按钮的时候,屏幕不是变暗了吗?或者出现一个小广告,这个就可以理解为被另一个全屏透明的东西遮住和非全屏的小广告,这个就是暂停状态了

        3.看港剧看多了,不想看了,就换部日本动作片来看,这时港剧不是看不到了吗?或者电脑直接黑屏了,反正看不到港剧,也就是当前的activity。这些都可以称为 停止状态

        4.就是不想看电影了,直接手动把播放器关掉,处于暂停或者停止状态,内存不足的时候系统会自动关掉播放器

    还不明白话,先不用钻牛角尖,先往下看,往后会慢慢的明白的.........

    Activity该谁来管?

    activity是由栈来管理的,先进后出,后进先出。每一个用户能看到的activity都是处于栈顶的,当内存不足的时候,栈里面最底下的那个activity就会被回收,直接上图最明了

     它又是怎么个生老病死的呢?(生命周期)

      这个我就不多说了,直接开始.. 

      官方生命周期图,LP动了点手脚:

      

    图看完了,紧接着是代码:

     1 package com.leo.writeblog;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.util.Log;
     6 
     7 public class MainActivity extends Activity {
     8     private final String TAG = "MainActivity";
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12         setContentView(R.layout.activity_main);
    13     }
    14     @Override
    15     protected void onStart() {
    16         super.onStart();
    17         Log.i(TAG, "onStart");
    18     }
    19     @Override
    20     protected void onResume() {
    21         super.onResume();
    22         Log.i(TAG, "onResume");
    23     }
    24     @Override
    25     protected void onRestart() {
    26         super.onRestart();
    27         Log.i(TAG, "onRestart");
    28     }
    29     @Override
    30     protected void onPause() {
    31         super.onPause();
    32         Log.i(TAG, "onPause");
    33     }
    34     @Override
    35     protected void onStop() {
    36         super.onStop();
    37         Log.i(TAG, "onStop");
    38     }
    39     @Override
    40     protected void onDestroy() {
    41         super.onDestroy();
    42         Log.i(TAG, "onDestroy");
    43     }
    44 }
    View Code

     首次运行的日志如下:

    按返回键退出的时候日志如下:

    按小房子键的时候日志如下:

    从新返回应用程序的时候日志如下:

    还有就是当activity还可见的时候,也就是弹出小窗口,或者透明的activity的时候,只会执行   onPause方法,当activity再次获得焦点后就执行onResume

    onCreate:activity第一次运行的时候才调用,而且只调用一次

    onRestart:activity不可见后恢复可见时调用

    onStart:activity可见的时候调用

    onStop:activity不可见的时候调用

    onResume:activity获取焦点时调用

    onPause:activitiy失去焦点时调用

    onDestroy:activity销毁时调用

    启动模式

    说到启动模式,它一共有四种,分别是standard、singleTop、singleTask、singleInstance,可以在AndroidManifest.xml文件中通过<activity>标签中的android:launchMode属性来选择启动模式。

    standard:

        这种模式是标准启动模式,也是默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种模式

    singleTop

        当启动模式为singleTop时,在启动活动的时候如果发现返回栈的站定已经是该活动,那么就直接使用,不必再创建

    singleTask

        当启动模式为singleTask的时候,每次启动活动都会在返回栈中检查是否存在该活动,如果存在,并发活动之上的活动统统出栈,否则就创建一个

    singleInstance

        启动模式 为singleInstance,这时会单独创建一个返回栈来管理这个活动,这样可以达到程序与程序之间共享活动

    该如何去使用它?

    我们在创建activity的时候必须继承Android自带的Activity,在使用时必须要在AndroidManifest.xml文件中注册,如下:

    它们兄弟之间是怎么交流的呢?

    是通过意图(Intent)进行通讯,数据传输,开启活动

    什么是意图呢?

    其实它就像我们生活中的快递员,负责帮我们送东西,Android系统里的意图就是上演着这个角色...

    它可以与不同程序的活动交流,也可以启动不在同一个程序中的活动......等等一些,这里我就不做多介绍了,需要往下了解的可以到网上查下资料

    版权声明


    作者:xiaoli(小黎)

    出处:博客园小黎的技术博客--http://www.cnblogs.com/coffeeXiaoLi/

    您的支持是对博主最大的鼓励,感谢您的认真阅读。

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Centos7上安装docker
    centos如何查看某一目录下每个目录或文件占用磁盘空间大小
    大学毕设参考文献在什么网站搜索
    Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据
    JQuery选择器通过click事件获取当前点击对象的id,name,value属性
    利用ajax和servlet实现前后端数据交互(json)
    Java软件工程的弹幕调试原则
    周周总结——时时更新(第4学期,第8周)
    团队软件的NABCD——星遇
    周周总结——时时更新(第4学期,第7周)
  • 原文地址:https://www.cnblogs.com/coffeeXiaoLi/p/4205667.html
Copyright © 2020-2023  润新知