安卓初学者笔记(四):用白话讲明白Activity是什么
刚开始学习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是什么相关推荐
- 乘风破浪的迁移学习!四字成语讲明白这个大热研究方向
导读:现在迁移学习大热,它红,是有它的道理的.什么是迁移学习?本文用最通俗易懂的语言为你讲解. 作者:木羊同学 来源:大数据DT(ID:hzdashuju) 迁移学习现在是很热的一个前沿研究方向. 当 ...
- 初学者指南:什么是算法?11行伪代码给你讲明白
导读:本文带你熟悉一个重要的术语--算法. 作者:帕诺斯·卢里达斯(Panos Louridas) 来源:大数据DT(ID:hzdashuju) 算法(algorithm)就是一个过程,是一种特殊的过 ...
- Linux性能优化实战学习笔记:第四十六讲=====实战分析
Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...
- 《视觉SLAM十四讲》学习笔记:第5讲相机与图像
<视觉SLAM十四讲>学习笔记:第5讲相机与图像 前言:本学习笔记将记录<视觉SLAM十四将>中一些重要的知识点,并对书中一些比较难的知识点添加上一些笔者个人的理解,以供笔者本 ...
- 初学者笔记(四):做一个体重指数BMI的小程序
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 初学者笔记(三):利用python列表做一个最简单的垃圾分类 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8523341 作者:毛星云(浅墨 ...
- 分享丨终于有人把云计算、大数据和人工智能讲明白了!
导 读 本文作者凭借其天马行空的脑回路,用最深入浅出,清晰化的文字逻辑,讲明白了云计算.大数据和人工智能三者之间的关系. 故事里面三个角色: 兼具经济效益与情怀的云计算:努力把信息变为智慧的大数据:模 ...
- 安卓初学者的经验分享
如果你很想要一样东西,那么就放他离开,等他回来找你的时候,你就永远拥有他了. --玄色<哑舍> 本人在公司实习的是安卓项目开发,但是在大学里并没有学过安卓相关的内容,在进入到公司之后,大约 ...
- 4种数据分析基础方法,终于有人讲明白了
导读:提到数据分析的基础方法,大家肯定很容易想到对比.细分和趋势,但是这些都是非常基础的入门理论,本文不会涉及.本文主要介绍产品经理在管理整个项目.解决整个项目的问题的时候,需要用到的数据分析方法. ...
最新文章
- 微信小程序实现滑动翻页效果源码附效果图
- 创建自己的CA机构 - openssl cert 双向认证
- icmp 报文中的进程号
- 论文中常用的几个Word2010技巧
- 移动设备改变IO,试图改变(数据的)存储和处理(CPU)
- c语言中的运算符及其含义_按位运算符及其在C语言中与Example一起使用
- python爬虫常用第三方库
- r 语言初学者指南_自然语言处理初学者指南
- 为什么要写博客?怎么写博客?
- WordPress纯代码纯静态开启七牛CDN并集成七牛缩略图和水印功能
- Python绘制多维度专题地图
- Android 支付宝开发错误总结
- [Algorithmic Toolbox学习笔记][week6]Placing Parentheses
- 疫情引发橡胶产业市场动荡,企业如何重构供应生态打破劣局?
- mysql 索引案例与索引策略
- 【Servlet】什么情况下调用doGet和doPost
- 领导的艺术:工作里怎么样做,才是包容
- hdu-4966 GGS-DDU 最小树形图
- vc6 调试 附加到进程 列表空_今天,进程告诉我线程它它它它不想活了
- 单元测试总结反思_单元测试后反思
热门文章
- 服务器稳定时间,NTP时钟服务器网络时间服务器哪个更好呀?
- Java正则表达式工具类(持续更新)
- Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子
- win7下安装MQTT Paho客户端
- easyui filebox文件类型判断
- pytorch保存模型pth_pytorch模型文件pth详解
- 500次 “LOVE“的歌词 Taylor Swift歌词数据可视化分享
- test 4:假币问题
- Esxi通过U盘启动
- Linux兄弟连学习