刚开始学习Android,被Activity搞的晕头转向,看了很多资料,才大概搞清楚。因为那些高手写的都是术语和英文,想看懂文章就像要去威虎山剿匪一样,必须懂那些黑话,要不然基本有去无回。

Activity(活动)其实是“安卓”系统的重要组件(组成部分)之一。Android四大组件有Activity活动,Service服务,Content Provider内容提供,BroadcastReceiver广播接收器。

一个Activity是一个应用程序的组件,通常一个Activity里会有一个页面,用户让用户来操作,完成如打电话、发短信、拍照等功能。

通常一个Activity活动,会有七种状态,厉害吧?
onStart(); —->中文翻译:开始
onRestart(); —->中文翻译:重新开始
onResume(); —->中文翻译:恢复
onPause(); —->中文翻译:暂停
onStop(); —->中文翻译:停止
onDestroy(); —->中文翻译:消毁

为什么会有这么多种状态?因为Android是机器人,不是人,还没有达到人工智能,所以你想让它做什么事,必须详细告诉它每一步要做什么,在做这些事的过程中可能会遇到什么情况,如何处理。

比如,指挥一个机器人如何看书,如下图:

指挥机器人的步骤越详细,越容易让机器人理解。看懂了以上的内容,再来看看原版的图片。

这回大概能理解Activity的工作原理了吧?

接下来,要引入下一个概念:,栈(stack)又名堆栈,堆,一堆东西,有点好理解了吧?如果还是不理解,直接就把栈想像成几页A4纸,实际上,就是这原理。

可以把安卓的Activity栈想像成几张A4纸,你看到手机现在的可操作页面就是最顶上的A4纸,你可以在这儿写写画画。需要其它页的时候,通常把这页纸放到下边,再拿一张纸放在最上面(栈顶)。

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

当然,以上的基本思路能理解,接下来,我们就可以做实验了。
建立一个新的项目,画两个页面,这个可以会。

然后把如下代码复制到MainActivity.java里:

package com.example.jeffersli.myapplication;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity {private static final String TAG = "ActivityDemo";private Button button,button2;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button);button2=(Button)findViewById(R.id.button2);button.setOnClickListener(new View.OnClickListener(){public void onClick(View v){Intent intent = new Intent();intent.setClass(MainActivity.this, SecondActivity.class);startActivity(intent);}});button2.setOnClickListener(new View.OnClickListener(){public void onClick(View v){finish();}});Log.e(TAG, "start onCreate~~主页面建立,拿起第一本书");}@Overrideprotected void onStart() {super.onStart();Log.e(TAG, "start onStart~~主页面开始,开始翻页");}@Overrideprotected void onRestart() {super.onRestart();Log.e(TAG, "start onRestart~~主页面重启,找到刚才的书");}@Overrideprotected void onResume() {super.onResume();Log.e(TAG, "start onResume~~主页面继续,看书");}@Overrideprotected void onPause() {super.onPause();Log.e(TAG, "start onPause~~主页面暂停,放下");}@Overrideprotected void onStop() {super.onStop();Log.e(TAG, "start onStop~~主页面停止,第一本书本自动合上");}@Overrideprotected void onDestroy() {super.onDestroy();Log.e(TAG, "start onDestroy~~主页面消毁,把第一本书放到书架上");}}

再建立一个SecondActivity,别忘了在AndroidManifest.xml里注册。语句为:

package com.example.jeffersli.myapplication;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class SecondActivity extends Activity {private static final String TAG = "ActivityDemo";private Button button;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);button=(Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener(){public void onClick(View v){finish();}});Log.e(TAG, "start onCreate~~第二页面建立,拿起第二本书");}@Overrideprotected void onStart() {super.onStart();Log.e(TAG, "start onStart~~第二页面开始,开始翻页");}@Overrideprotected void onRestart() {super.onRestart();Log.e(TAG, "start onRestart~~第二页面重启,找到刚才的书");}@Overrideprotected void onResume() {super.onResume();Log.e(TAG, "start onResume~~第二页面继续,看书");}@Overrideprotected void onPause() {super.onPause();Log.e(TAG, "start onPause~~第二页面暂停,放下");}@Overrideprotected void onStop() {super.onStop();Log.e(TAG, "start onStop~~第二页面停止,第二本书本自动合上");}@Overrideprotected void onDestroy() {super.onDestroy();Log.e(TAG, "start onDestroy~~第二页面消毁,把第二本书放到书架上");}
}

接下来编译运行,在Logcat窗口就可以看到有意思的内容了,玩一会就理解这些Activity到底在忙啥了。

安卓初学者笔记(四):用白话讲明白Activity是什么相关推荐

  1. 乘风破浪的迁移学习!四字成语讲明白这个大热研究方向

    导读:现在迁移学习大热,它红,是有它的道理的.什么是迁移学习?本文用最通俗易懂的语言为你讲解. 作者:木羊同学 来源:大数据DT(ID:hzdashuju) 迁移学习现在是很热的一个前沿研究方向. 当 ...

  2. 初学者指南:什么是算法?11行伪代码给你讲明白

    导读:本文带你熟悉一个重要的术语--算法. 作者:帕诺斯·卢里达斯(Panos Louridas) 来源:大数据DT(ID:hzdashuju) 算法(algorithm)就是一个过程,是一种特殊的过 ...

  3. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  4. 《视觉SLAM十四讲》学习笔记:第5讲相机与图像

    <视觉SLAM十四讲>学习笔记:第5讲相机与图像 前言:本学习笔记将记录<视觉SLAM十四将>中一些重要的知识点,并对书中一些比较难的知识点添加上一些笔者个人的理解,以供笔者本 ...

  5. 初学者笔记(四):做一个体重指数BMI的小程序

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 初学者笔记(三):利用python列表做一个最简单的垃圾分类 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...

  6. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  7. 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...

  8. 分享丨终于有人把云计算、大数据和人工智能讲明白了!

    导 读 本文作者凭借其天马行空的脑回路,用最深入浅出,清晰化的文字逻辑,讲明白了云计算.大数据和人工智能三者之间的关系. 故事里面三个角色: 兼具经济效益与情怀的云计算:努力把信息变为智慧的大数据:模 ...

  9. 安卓初学者的经验分享

    如果你很想要一样东西,那么就放他离开,等他回来找你的时候,你就永远拥有他了. --玄色<哑舍> 本人在公司实习的是安卓项目开发,但是在大学里并没有学过安卓相关的内容,在进入到公司之后,大约 ...

  10. 4种数据分析基础方法,终于有人讲明白了

    导读:提到数据分析的基础方法,大家肯定很容易想到对比.细分和趋势,但是这些都是非常基础的入门理论,本文不会涉及.本文主要介绍产品经理在管理整个项目.解决整个项目的问题的时候,需要用到的数据分析方法. ...

最新文章

  1. 微信小程序实现滑动翻页效果源码附效果图
  2. 创建自己的CA机构 - openssl cert 双向认证
  3. icmp 报文中的进程号
  4. 论文中常用的几个Word2010技巧
  5. 移动设备改变IO,试图改变(数据的)存储和处理(CPU)
  6. c语言中的运算符及其含义_按位运算符及其在C语言中与Example一起使用
  7. python爬虫常用第三方库
  8. r 语言初学者指南_自然语言处理初学者指南
  9. 为什么要写博客?怎么写博客?
  10. WordPress纯代码纯静态开启七牛CDN并集成七牛缩略图和水印功能
  11. Python绘制多维度专题地图
  12. Android 支付宝开发错误总结
  13. [Algorithmic Toolbox学习笔记][week6]Placing Parentheses
  14. 疫情引发橡胶产业市场动荡,企业如何重构供应生态打破劣局?
  15. mysql 索引案例与索引策略
  16. 【Servlet】什么情况下调用doGet和doPost
  17. 领导的艺术:工作里怎么样做,才是包容
  18. hdu-4966 GGS-DDU 最小树形图
  19. vc6 调试 附加到进程 列表空_今天,进程告诉我线程它它它它不想活了
  20. 单元测试总结反思_单元测试后反思

热门文章

  1. 服务器稳定时间,NTP时钟服务器网络时间服务器哪个更好呀?
  2. Java正则表达式工具类(持续更新)
  3. Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子
  4. win7下安装MQTT Paho客户端
  5. easyui filebox文件类型判断
  6. pytorch保存模型pth_pytorch模型文件pth详解
  7. 500次 “LOVE“的歌词 Taylor Swift歌词数据可视化分享
  8. test 4:假币问题
  9. Esxi通过U盘启动
  10. Linux兄弟连学习