Activity组件详解
前言:今天开始我们学习安卓开发中的第一个组件,Activity,今天的内容如下:
-
目录
-
1 Activity的概念
-
2.Activity 的周期
-
3每个周期应该做的事
-
4 活动状态
-
5 执行生命周期的过程
-
6 Activity的简单使用流程
1. 经查资料:
Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作, 比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口, 而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!
从上面这段话,我们可以得到以下信息:
1.Activity用于显示用户界面,用户通过Activity交互完成相关操作
- 一个App允许有多个Activity
- 总结:Activity = 视图 = 所有能看见的东西
2.Activity的生命周期:
————————————————————————————————————
onCreate:创建(配置UI界面)
onStart: 开始(创建资源)
onResume: 继续(用户交互)
onReStart: 重新开始
onPause: 暂停 (保存数据,停止动画的播放)
On stop: 停止 (释放资源)
onDestory: 销毁
3. 生命周期该做的事
- onCreate()
声明UI元素,定义成员变量,配置UI等
尽量少做些事,避免程序启动太久而看不见界面
一旦onCreate() 操作完成,系统会迅速调用onStart() 与onResume()方法- onDestoty()
需要将该activity彻底移除的信号时,系统会调用这个方法
大多数app并不需要实现onDestory()这个方法,由于局部类references会随activity的销毁而销毁
我们的activity应该在onPause(), onStop()中执行清除activity资源的操作
如果含有onCreate()中创建的后台线程,或是其他有可能导致内存泄漏的的资源,应在onDestory()中清理资源
在onCreate()中,直接调用finish()方法,系统会直接调用onDestory()方法,跳过其他的声明周期
不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的
销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在
Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。
- onPause()
停止动画或其他运行的的操作,那些都会导致cpu浪费
提交用户离开时期保存的内容(例如邮箱草稿)
释放系统资源,Camera,Broadcast Receiver,sensors(传感器,比如GPS) ,以及任何其他影响电量的资源
不应该保存用户数据到永久存储上 (File或Db中)
尽量减少onPause() 中的工作量避免切换到下一个activity变得缓慢
当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate
方法,所以在 onPause 方法中不适合做耗时较长的工作,这会影响到页面之间的跳
转效率。
在 Activity.onPause()或 Activity.onStop()回调中,关闭当前 activity 正在执
行的的动画。
- onResume()
恢复activity时,应该初始化那些onPause() 释放掉的组件
执行那些activity每次进入resume state 都需要进行初始化的动作
- onStop()
应该释放那些不再需要的所有资源,避免内存泄漏,onStop() 后系统会在需要内存空间时摧毁它的实例
使用onStop()来执行那些CPU intensive的shut-down操作,例如往数据库写信息
系统会保存布局中视图的当前状态,例如,可以保存EditText中的文本内容,停止通过Service定时更新UI上的数据的Service- onStart()
在onStop()中里面做了那些清除的操作,就应该做instant中把那些清除掉的资源重新创建出来
4 .活动状态
1.运行状态
2.暂停状态(Resume)
3.停止状态(Restart->Start->Reaume)
4.销毁状态
5 活动生存期
1.完整生存期 onCreate===onDestory
2.可见生存期 onStart===onStop
3.前台生存期 onResume===onPause
6. 解释
1.Android用Activity Stack来管理多个Activity,所以呢,同一时刻只会有最顶上的那个Activity是处于active或者running状态。其它的Activity都被压在下面了。
- 如果非活动的Activity仍是可见的(即如果上面压着的是一个非全屏的Activity或透明的Activity),它是处于paused状态的。在系统内存不足的情况下,paused状态的Activity是有可被系统杀掉的。只是不明白,如果它被干掉了,界面上的显示又会变成什么模样?看来下回有必要研究一下这种情况了。
3.几个事件的配对可以比较清楚地理解它们的关系。Create与Destroy配成一对,叫entrie lifetime,在创建时分配资源,则在销毁时释放资源;往上一点还有Start与Stop一对,叫visible lifetime,表达的是可见与非可见这么一个过程;最顶上的就是Resume和Pause这一对了,叫foreground lifetime,表达的了是否处于激活状态的过程。
4.因此,我们实现的Activity派生类,要重载两个重要的方法:onCreate()进行初始化操作,onPause()保存当前操作的结果
7.执行阶段
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
执行阶段的图解:
8.Activity的使用流程:
我相信才进入安卓,很多人还不适应,不要心燥,慢慢来,坚持就是胜利。