理解activity的生命周期
2016-03-08 21:25
281 查看
首先,我们要知道android的生命周期几乎和活动activity的生命周期相同。想要知道activity的生命周期,那么我们先了解一下活动堆栈。
一,活动堆栈
开始我们先讲一个关于洗碗工的故事:一天有一个洗碗工在洗碟子,当他把第一个碟子洗好了就放在桶里,洗碗工每洗好一个新的碟子就往桶里放。洗碗工把碟子洗好了,就把全部的碟子放在厨房里,每放厨师出一个新的菜,就在桶里拿出一个新的碟子。直到碟子用完。
故事已经说完了,其实故事里面说的洗碗工洗碟子,就好像应用程序每当启动一个新的活动,每一个新的活动就往栈内存放。栈底就是第一个启动的活动,栈顶就是现在看到的活动。那么每次退出这个活动,就如同上面故事说的厨师出一个新的菜。直到碟子用完了,我们的应用程序页退出了界面。
二,生命周期
如果之前有学过jsp 和 servlet,就发现servlet里面也有生命周期,我们会根据不同的状态转换,而不是目前的那一个状态。现在先看下图,了解activity的生命周期。
activity的生命周期有5个状态:分别是启动,运行,暂停,停止,销毁。
1,启动activity,会调用系统的onCreate()方法,然后调用onStart()方法,最后调用onResume()方法。(启动->运行)
2,目前activity切被一个新的activity覆盖,或者是锁屏:系统调用onPause()方法。目前activity处于暂停状态,不可见。(运行->暂停)
3,目前activity由于被覆盖回到前台或者是解锁,会调用系统的onPesume()方法回到运行状态。(暂停->运行)
4,目前activity由于新的activity界面或者按了Home返回菜单,系统会调用onPause()方法,再调用onStop()方法。(运行->停止)
5,用户重新回到activity界面中,系统将调用onStart(),再调用onStart(),最后调用onResume()方法。(停止->运行)
6,用户退出activity,系统调用onPause(),再调用onStop(),最后调用onDestory()方法,退出程序。(运行->销毁).
注意:在停止状态的时候,如果手机的内存太低,或者是运行内存清理程序,就会调用onDestroy()方法杀死程序。
对于用户来说,活动状态只有3种,可见(运行和暂停),不可见(停止和销毁),获得焦点(运行)。
三,管理活动的状态
简单的说明一下生命周期的每一个方法的回调以及说明。
onCreate():此方法在活动的创建时候调用,可以在此方法运行静态活动的初始化,并且可以在此方法创建使用界面的组件,我们可以将这个方法看做活动的入口。
onStart():此方法会在用户将要看到的时候调用。
onResume():此方法会在与用户互动的时候调用。
onPause():此方法会在暂停目前的活动时候调用,例如:我们显示对话框的时候,活动就调用了此方法。并且我们也会在此方法存储尚未存储的数据。
onStop()此方法会在停止活动的时候调用,也是用户看不见的时候。可能有3种情况,启动新活动,之前的活动返回到屏幕,或活动将被删除。
onRestart():此方法在活动重新返回屏幕的时候调用。例如:突然来了条短信,然后你打开阅读完的短信,最后有打开了这个程序的活动。
onDestory():此方法会在销毁活动的时候调用。
四,代码测试
一,活动堆栈
开始我们先讲一个关于洗碗工的故事:一天有一个洗碗工在洗碟子,当他把第一个碟子洗好了就放在桶里,洗碗工每洗好一个新的碟子就往桶里放。洗碗工把碟子洗好了,就把全部的碟子放在厨房里,每放厨师出一个新的菜,就在桶里拿出一个新的碟子。直到碟子用完。
故事已经说完了,其实故事里面说的洗碗工洗碟子,就好像应用程序每当启动一个新的活动,每一个新的活动就往栈内存放。栈底就是第一个启动的活动,栈顶就是现在看到的活动。那么每次退出这个活动,就如同上面故事说的厨师出一个新的菜。直到碟子用完了,我们的应用程序页退出了界面。
二,生命周期
如果之前有学过jsp 和 servlet,就发现servlet里面也有生命周期,我们会根据不同的状态转换,而不是目前的那一个状态。现在先看下图,了解activity的生命周期。
activity的生命周期有5个状态:分别是启动,运行,暂停,停止,销毁。
1,启动activity,会调用系统的onCreate()方法,然后调用onStart()方法,最后调用onResume()方法。(启动->运行)
2,目前activity切被一个新的activity覆盖,或者是锁屏:系统调用onPause()方法。目前activity处于暂停状态,不可见。(运行->暂停)
3,目前activity由于被覆盖回到前台或者是解锁,会调用系统的onPesume()方法回到运行状态。(暂停->运行)
4,目前activity由于新的activity界面或者按了Home返回菜单,系统会调用onPause()方法,再调用onStop()方法。(运行->停止)
5,用户重新回到activity界面中,系统将调用onStart(),再调用onStart(),最后调用onResume()方法。(停止->运行)
6,用户退出activity,系统调用onPause(),再调用onStop(),最后调用onDestory()方法,退出程序。(运行->销毁).
注意:在停止状态的时候,如果手机的内存太低,或者是运行内存清理程序,就会调用onDestroy()方法杀死程序。
对于用户来说,活动状态只有3种,可见(运行和暂停),不可见(停止和销毁),获得焦点(运行)。
三,管理活动的状态
简单的说明一下生命周期的每一个方法的回调以及说明。
onCreate():此方法在活动的创建时候调用,可以在此方法运行静态活动的初始化,并且可以在此方法创建使用界面的组件,我们可以将这个方法看做活动的入口。
onStart():此方法会在用户将要看到的时候调用。
onResume():此方法会在与用户互动的时候调用。
onPause():此方法会在暂停目前的活动时候调用,例如:我们显示对话框的时候,活动就调用了此方法。并且我们也会在此方法存储尚未存储的数据。
onStop()此方法会在停止活动的时候调用,也是用户看不见的时候。可能有3种情况,启动新活动,之前的活动返回到屏幕,或活动将被删除。
onRestart():此方法在活动重新返回屏幕的时候调用。例如:突然来了条短信,然后你打开阅读完的短信,最后有打开了这个程序的活动。
onDestory():此方法会在销毁活动的时候调用。
四,代码测试
public class MainActivity extends Activity { //1,创建 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("TAG", "MainActivity:onCreate()"); } //2,开始 @Override protected void onStart() { super.onStart(); Log.d("TAG", "MainActivity:onStart() "); } //3,继续 @Override protected void onResume() { super.onResume(); Log.d("TAG", "MainActivity:onResume()"); } //4,暂停 @Override protected void onPause() { super.onPause(); Log.d("TAG", "MainActivity: onPause()"); } //5,停止 @Override protected void onStop() { super.onStop(); Log.d("TAG", "MainActivity :onStop()"); } //6,重新启动 @Override protected void onRestart() { super.onRestart(); Log.d("TAG", "MainActivity: onRestart()"); } //7,销毁 @Override protected void onDestroy() { super.onDestroy(); Log.d("TAG", "MainActivity :onDestroy()"); } }
相关文章推荐
- Ruby on Rails 网站大型化之静态资源 CDN 架构
- Android瀑布流照片墙实现,体验不规则排列的美感
- android:layout_weight的真实含义
- 今天完毕一篇特殊的作文:写出《公司手冊》的每一个字
- Docker入门教程(一)介绍
- hdu 1010 Tempter of the Bone
- 【C#进阶系列】07 常量和字段
- 窗口类释放问题
- Apache启动提示 httpd: apr_sockaddr_info_get() failed for xxx
- javascript中数组(Array)对象的方法和字符串(String)对象的方法
- XML xml spy 5.0 注册码
- 赫夫曼树
- 1004. Counting Leaves (30)
- 协议学习----协议的种类和使用方位
- 让vim支持nginx语法高亮
- [LeetCode] 3Sum分析与C/C++解法
- 单链表的反转
- ecshop订单状态数据表说明
- poj 3187 Backward Digit Sums
- hdu1007最近点对-分治策略-具体优化