Android学习之路--Activity篇(生命周期)
2、调用过程:
onCreate->onStart()->onResume()->onPause()->onStop()->onDestroy
Activity、Activity2、Activity3的调用过程
启动时 09-15 11:13:53.802: INFO/ActivityTest(25029): start onCreate------
09-15 11:13:53.844: INFO/ActivityTest(25029): start onStart------
09-15 11:13:53.844: INFO/ActivityTest(25029): start onResume------
黑屏时
09-15 11:14:23.896: INFO/ActivityTest(25029): start onSaveInstanceState------
09-15 11:14:23.896: INFO/ActivityTest(25029): start onPause------
解锁回到界面
09-15 11:19:42.494: INFO/ActivityTest(25029): start onResume------
点击返回时
09-15 11:20:09.807: INFO/ActivityTest(25029): start onPause------
09-15 11:20:10.308: INFO/ActivityTest(25029): start onStop------
09-15 11:20:10.308: INFO/ActivityTest(25029): start onDestroy------
从列表进入时
09-15 11:20:34.954: INFO/ActivityTest(25029): start onCreate------
09-15 11:20:34.963: INFO/ActivityTest(25029): start onStart------
09-15 11:20:34.963: INFO/ActivityTest(25029): start onResume------
点击home时
09-15 11:21:23.694: INFO/ActivityTest(25029): start onSaveInstanceState------
09-15 11:21:23.695: INFO/ActivityTest(25029): start onPause------
09-15 11:21:24.155: INFO/ActivityTest(25029): start onStop------
从home返回时
09-15 11:21:41.547: INFO/ActivityTest(25029): start onRestart------
09-15 11:21:41.548: INFO/ActivityTest(25029): start onStart------
09-15 11:21:41.548: INFO/ActivityTest(25029): start onResume------
跳转Activity 2
09-15 11:22:14.076: INFO/ActivityTest(25029): start onSaveInstanceState------
09-15 11:22:14.076: INFO/ActivityTest(25029): start onPause------
09-15 11:22:14.105: INFO/ActivityTest(25029): Activity02----->onCreate
09-15 11:22:14.113: INFO/ActivityTest(25029): Activity02--->onStart
09-15 11:22:14.114: INFO/ActivityTest(25029): Activity02--->onResume
Activi2 点击返回时
09-15 11:22:46.172: INFO/ActivityTest(25029): Activity02--->onPause
09-15 11:22:46.185: INFO/ActivityTest(25029): start onResume------
09-15 11:22:46.217: INFO/ActivityTest(25029): Activity02--->onStop
09-15 11:22:46.218: INFO/ActivityTest(25029): Activity02--->onDestroy
Activi2 home建
09-15 11:23:26.076: INFO/ActivityTest(25029): Activity02--->onSaveInstanceState
09-15 11:23:26.076: INFO/ActivityTest(25029): Activity02--->onPause
09-15 11:23:26.086: INFO/ActivityTest(25029): start onStop------
09-15 11:23:26.424: INFO/ActivityTest(25029): Activity02--->onStop
返回到 Activi2
09-15 11:24:02.802: INFO/ActivityTest(25029): start onRestart------
09-15 11:24:02.802: INFO/ActivityTest(25029): start onStart------
09-15 11:24:02.802: INFO/ActivityTest(25029): Activity02--->onRestart
09-15 11:24:02.802: INFO/ActivityTest(25029): Activity02--->onStart
09-15 11:24:02.802: INFO/ActivityTest(25029): Activity02--->onResume
跳转 Activity 3
09-15 11:24:40.401: INFO/ActivityTest(25029): start onSaveInstanceState------
09-15 11:24:40.401: INFO/ActivityTest(25029): start onPause------
09-15 11:24:40.413: INFO/ActivityTest(25029): Activity03----->onCreate
09-15 11:24:40.435: INFO/ActivityTest(25029): Activity03----->onStart
09-15 11:24:40.436: INFO/ActivityTest(25029): Activity03----->onResume
09-15 11:24:40.741: INFO/ActivityTest(25029): start onStop------
Activity3 到4
09-15 11:25:12.297: INFO/ActivityTest(25029): Activity03--->onSaveInstanceState
09-15 11:25:12.297: INFO/ActivityTest(25029): Activity03----->onPause
09-15 11:25:12.733: INFO/ActivityTest(25029): Activity03----->onStop
Activi3 到 1
09-15 11:25:43.955: INFO/ActivityTest(25029): Activity03----->onPause
09-15 11:25:43.983: INFO/ActivityTest(25029): start onRestart------
09-15 11:25:43.983: INFO/ActivityTest(25029): start onStart------
09-15 11:25:43.983: INFO/ActivityTest(25029): start onResume------
09-15 11:25:44.231: INFO/ActivityTest(25029): Activity03----->onStop
09-15 11:25:44.231: INFO/ActivityTest(25029): Activity03----->onDestroy
|
在Acvitity1 进入 Activity2 的过程:
执行的生命周期是:
生命状态讲解:
在以上的生命状态中,有三个是静态的,这三个状态下的activity可以存在比较长的时间(其他几个状态停留时间较短,很快就会被切掉,停留时间较短)
- Resumed:这个生命状态中,activity是在最前端,用户可以与它进行交互。通常 理解为 (running 的)状态。
- Paused: 在这个状态中,activity 被另一个activity所遮盖,另外的activity来到最前面,是半透明不全屏遮盖的,而且被遮盖的activity不会接受用户的输入且不会执行任何代码(不执行代码不代表后台线程不工作)
- Stop:在这个状态中,activity会被完全的覆盖,用户见不到此activity,当stopped,activity实例与它的所有状态信息都会被保留,但是activity不执行任何代码。
- Created和Started:他俩都是短暂的,系统会快速执行回调函数,并通过下一阶段的回调函数移动到下一个状态。系统在调用OnCreate()后迅速调用OnStart(),之后再迅速调用OnResume()。
- 大多数Apps并不需要实现这个方法,因为局部类的references会随着activity的销毁而销毁,并且你的activity应该在onPause()与onStop()中执行清除activity资源的操作,然而,如果你的activity包含了你在onCreate时创建的后台线程,或者其他有可能导致内存泄漏的资源,你应该在onDestroy()时杀死他们。
- 系统通常执行了onPause()和onStop()方法后,再调用onDestroy()方法,除非你的程序在onCreate()方法里就调用了finish()方法,例如:activity的临时跳转,你需要在onCreate方法中,去调用finish方法,这样就会直接执行onDestroy方法,而不去执行其他的生命周期的方法。
当系统调用activity的onPause()方法时,意味着activtiy仍处于可见的状态,但大多数的时候,意味着用户正在离开这个activity并且马上会进入Stop的状态,通常需要在onPasuse的方法里做以下的事情:
- 停止动画或者是其他正在运行的操作,因为那些都会导致CPU的浪费。
- 提交没有保存的改变,仅仅是用户离开时,希望被保存的内容。
- 释放系统资源,例如broadcast receivers,sensors 或者其他会影响到电量的资源。
涉及到停止与重启的场景:
- 用户打开最近使用的APP菜单切换你的app到另一个app,这个时候你的app是被停止的。
- 如果用户用过手机主界面的启动图标或者最近使用的程序窗口重新回到你的app,那么你的app会重启。
- 用户在使用你的app时,接到一个电话。
当你的activity调用onStop()方法,activity不再可见,并且应该释放那些不再需要的所有资源。一旦你的activity停止了,系统不再需要这个activity时摧毁它的实例(和栈结构有关,通常back操作会导致前一个activity被销毁)。在极端情况下,系统会直接杀死你的app进程,并且不执行activity的onDestroy()回调方法,因此需要在onStop中释放资源,从而避免内存泄漏。(需要注意)
使用onReStart()来恢复activity状态是不太常见的,你的onStop方法应该做清除所有activity资源的操作,你需要在重新启动activity时重新实例化那些被清除的资源,同样也需要在activity第一次实例化那些资源。因此应该使用OnStart()作为onStop()所对应的方法。所以在onStop里面做了哪些清除的操作就应该在onStart里面重新把那些清除掉的资源重新创建出来