Android 四大核心组件之Activity
更新时间:2024-07-02 05:17:01 阅读量: 综合文库 文档下载
Android 四大核心组件之Activity[生
命周期篇]
转载请注明出处:http://blog.csdn.net/zigui14/article/details/39366925
从本文开始,将对android的核心内容进行学习,对于Android而言,其有最核心的四大基本组件,它们分别是:Activity、Service、Broadcast以及ContentProvider,我们将在接下来的一系列文章中,深入地了解android核心组件的使用以及其内部的动作。
本文主要内容:探究Android最常用也是核心中的核心——Activity,一个与用户直接进行交互的组件,是应用于用户之间的直接窗口,我们可以认为,Activity就是Android的门面,因此,深入地学习并了解其内部原理是极其必要的。
Activity作为一个程序入口,类似于main入口函数的作用,其有自己的生命周期,而Android凭借内部Activity Manager的管理机制,掌握着应用程序的“生”与“死”,首先我们引入一个Activity的生命周期结构图:
Activity的生命周期
在Android Activity的完整生存期里,可以划分为四个状态,分别是:
? ? ?
活动或正在运行状态(Running or active),可视 暂停状态(Pause),部分可视并且可以被强制销毁 停止状态(Stop),不可视,会被强制销毁
? 即将销毁状态(Destroy),不可视
以上四个状态,是按照当前Activity的可视程度以及系统的管理区分的,当一个Activity被创建后并完全地呈现在屏幕上时,那么它就是出于活动状态的;当一个Activity被另外一个视图部分遮挡(包括局部完全遮挡、被另外一个透明Activity遮挡),也就是Activity已经失去了焦点,但是它仍然可以被用户看到,此时就是处于暂停状态的;当一个Activity被完全遮挡,用户无法看到时,出于停止状态。
需要知道的是,不管Activity是处于Pause状态还是Stop状态,当系统内存不足时,将会将处于暂停或停止状态的Activity强制销毁,释放持有的系统资源,只有当系统资源充裕时,Pause的状态才能够维持,但是不管怎样,处于Stop的Activity最终将会进入下一个状态,即Destroy。
同时,还有七个生命周期方法,我们能够通过实现这些方法,对生命周期中因状态改变而产生的变化做出相应的反应:
[java] view plaincopy
1. public class FirstActivity extends Activity { 2.
3. private static final String TAG = \; 4.
5. @Override
6. protected void onCreate(Bundle savedInstanceState) { 7. super.onCreate(savedInstanceState); 8. setContentView(R.layout.activity_first); 9. // 一个新的Activity被创建,Activity生命周期开始 10. Log.i(TAG, \); 11. // 下一个方法将会进入onStart() 12. } 13.
14. @Override
15. protected void onStart() { 16. super.onStart();
17. // 当一个Activity的所有所需资源准备完成之后,将会显示给用户,处于Activity
的栈顶位置
18. Log.i(TAG, \);
19. // 下一个方法将会进入onResume(),如果不可见,将会进入onStop() 20. } 21.
22. @Override
23. protected void onRestart() { 24. super.onRestart();
25. // 由于用户进入下一个Activity或者是按了HOME键导致Activity不可见(即进入
onStop),再次使其
26. // 成为可视状态时,将会进入该方法 27. Log.i(TAG, \);
28. // 下一个方法将会进入onStart(),如过不可视,将会进入onStop() 29. } 30.
31. @Override
32. protected void onResume() { 33. super.onResume(); 34. // 从Pause状态转变 35. Log.i(TAG, \); 36. // 下一个方法将会进入onPause() 37. } 38.
39. @Override
40. protected void onPause() { 41. super.onPause();
42. // 当被部分遮挡时,进入此方法 43. Log.i(TAG, \);
44. // 下一个进入的生命周期方法为onResume(),如果变为不可视状态,将会进入
onStop() 45. } 46.
47. @Override
48. protected void onStop() { 49. super.onStop();
50. // 当一个Activity完全不可视时,将会处于Stop状态,但是系统不会立即进入
onDestroy
51. Log.i(TAG, \);
52. // 系统将会按照当前资源的使用情况,进入onDestroy() 53. } 54.
55. @Override
56. protected void onDestroy() { 57. super.onDestroy();
58. Log.i(TAG, \); 59. // 该Activity的生命结束 60. } 61. }
对应Activity的每一个生命周期函数,我们都必须对一些必要的资源进行配置或回收、对状态进行保存或恢复等工作,每一个生命周期函数中一般有固定的工作,物尽
其用将会事半功倍,同时也能将要完成的工作流程控制得很好,针对每一个生命周期函数,我们来浅析每一个方法内应该做哪些工作。
1、onCreate():这是一个Activity的入口,在这里,我们需要对一些全局资源进行初始化工作,如控件的绑定、控件监听器的绑定以及其它必要对象的初始化工作,onCreate()函数在整个完整的Activity生命周期中,只会被调用一次。
2、onDestroy():当一个Activity被系统销毁时,将会进入这个生命周期函数,在这里面,主要是对在运行过程中,释放从系统中索取的资源,包括一些全局资源以及一些网络、数据库连接等资源。
3、onStart():当UI可见时,可以重新启动一些更新UI的工作,同时包括一些Broadcast Receiver的注册。
4、onStop():用于暂停或停止动画、线程、Service、传感器监听器、线程、定时器等于更新UI有关的事务,在这里也能对Broadcase Receiver进行注销,因为当UI不可见的时候,这些动作往往是没有意义的,同时还会伴随着系统资源的消耗。 5、onRestart():除了在onStart第一次被调用时,onRestart()不被调用之外,在重新进入onStart()之前都会被立即调用,能够在这里实现一些在activity完整生命周期内重启的特殊处理。
5、onResume():当从onPause中重新被唤醒时,在这里继续进行一些轻量级的操作,太过复杂的工作将会降低用户交互。
6、onPause():当设备休眠、Activity被部分遮挡时,就会进入onPause()在这之前,一般都会现对onSaveInstanceState()进行处理,用于保存未来得及更改的事务,当下一次执行onResume之前,进行一些恢复性工作。
接下来我们通过实际运行,打印出日志,看Activity的实际生命周期的表现: 当我们第一次运行这个Activity时,依次执行的是:onCreate()->onStart()->onResume()
为了验证整个UI是在onResume()完成之后才进行显示的,我们不妨在onResume()中做一些稍微耗时的操作(注意,一般我们不会在这里做一些耗时操作,相反,这里面的工作应该是越少越好)。
[java] view plaincopy
1. @Override
2. protected void onResume() { 3. super.onResume(); 4. // 从Pause状态转变 5. Log.i(TAG, \); 6. // 下一个方法将会进入onPause() 7. for (int i = 0; i < 10; i++) { 8. try {
9. Log.i(TAG,\睡眠200ms\); 10. Thread.sleep(200);
11. } catch (InterruptedException e) { 12. e.printStackTrace(); 13. } 14. }
15. Log.i(TAG,\离开onResume()\); 16. }
我们观察日志打印情况,同时观察UI的绘制,可以发现整个UI的呈现是在离开onResume之后发生的。
现在,我们进行这样的操作,观察UI的表现以及日志的输出情况:点击HOME键,日志输出如下:
我们看到,实际运行情况与Activity的生命周期图所描述的一致,刚才的Activity已经出于不可视状态,执行了onStop()这个方法,当我们再次点击运行这个应用时,我们观察到这样的情况:
正在阅读:
施工技术交底管理办法11-24
2022比较吸引人的自我介绍文案04-16
如何设计人工煤气可燃气体探测器项目可行性研究报告(技术工艺+设备选型+财务概算+厂区规划)标准方案10-11
假如我是一位老师作文600字07-08
U5风险与收益入门及历史回顾12-05
面包的基础知识及原理 - 图文11-04
最新2009年中考数学复习教材回归知识讲解+例题解析+强化训练(用统计图表描述数据)文档01-07
寻龙点穴察砂觅水立向择日时05-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 组件
- Activity
- 核心
- Android
- 四大
- 永磁同步电机永磁体涡流损耗计算与研究 - 图文
- 2018年普通高等学校招生全国统一考试高考文综临考冲刺卷(八)
- 公安民警个人工作总结2010
- pH计缓冲液与pH电极相关常见问题
- 《机械制造技术基础》期末考试试卷及答案
- 电大信息技术与信息管理形成性考核选择题
- 2014保险经典话术(下)
- LNG站线项目监理HSE计划
- eda基于FPGA的波形发生器 - 图文
- 小学美术教研组活动记录表
- 生物竞赛试题选编一:生命的物质基础
- 行政管理讲座
- 股票公式编辑器教程
- 电气安装工程技术交底
- 电机转子动平衡作业指导书
- 贯彻落实县行政会会议精神的具体思路
- 2007年哈尔滨市中考英语试卷及答案 - 图文
- 2014年北京中考一模数学试题第23题汇编
- 15.12.11中华人民共和国居民身份证管理条例和实施细则
- 罗源实小2012-2013学年度第一册数学期末试卷卷