您的位置:首页 > 产品设计 > UI/UE

Android API Guides 阅读笔记(2)----Activity

2015-07-24 14:31 267 查看
Activity 是应用程序的必备组件,它提供了一个屏幕,用户可与之互动,以做一些事情,如拨打电话,拍照,发送电子邮件,或查看地图。每个Activity 会提供一个窗口,在其中绘制它的用户界面。通常窗口会填满整个屏幕,但也有可能比屏幕小并且浮动在其他窗口之上。

通过阅读这节内容,将会了解到:

一个应用程序通常由许多Activity组成,其中一个Activity是程序入口Activity(用户点击程序图标,首先进入的Activity),Activity之间通过Intent进行跳转,通过后退栈(back stack)进行保存与取出,由此,引入Activity生命周期的概念,Activity的生命周期回调方法(onCreate(),onPause(),onDestory(),etc)由Android系统调用,开发者在这些回调方法中写入一定的逻辑,然后等待系统根据用户的操作进行调用

默认程序入口Activity的清单文件里,< intent-filter >中的< action >元素指定当前Activity为应用程序的入口,< category >元素指定当前Activity应该放在Android系统应用程序列表界面(就是启动图标,用户点击就启动这个Activity)

其他Activity通过Intent可以启动一个Activity,调用startActivity()或者startActivityForResult()(执行完成返回结果,例如选择系统相册中的照片过程),通过调用finish()可以关闭当前Activity

Activity的生命周期:

onCreate():当一个Activity首次被创建时(之前调用过onDestroy()使之销毁)调用

onStart():当Activity对用户可见的时候调用

onResumed():在用户与Activity交互之前调用,此时的Activity位于栈顶

注: 以下的回调方法为“之后可被kill”的方法(调用之后系统可以将这个Activity销毁),即当系统出现紧急情况(内存严重不足)时,可以不调用以下的方法直接结束进程,因此,对于数据和状态的保存,需要考虑放在哪个方法里比较合适

onPause():当系统将要启动其他的Activity时调用,此方法通常用于保存当前Activity中的状态和数据(如果系统内存紧急回收,将会调用onPause(),可能不会调用onStop()和onDestroy(),所以保存当前状态的操作应该在onPause()中执行)、

onStop():当Activity不再对用户可见时调用

onDestroy():在Activity被销毁之前调用,当代码中调用了finish()时也会调用此方法

注意,在做任何事情之前,实现这些生命周期方法,必须始终调用父类的实现,即,调用super.onCreate();等.

Activity当前状态保存:当一个Activity处于paused(onPause())或者stoped(onStop())时,当前Activity的状态依然保留(用户操作过的改变或填写的一些内容依然存在),因为这时的Activity依然驻留在内存中,因此当这个Activity回到屏幕前时,之前的改变还在,但是当这个Activity被系统销毁后,这些数据就都不在了,因此,要想让Activity被销毁后重新创建时恢复之前的状态,就需要使用onSaveInstanceState()方法,系统会在Activity销毁前调用此方法,如果用户是点击back button按钮离开当前页面,则系统不会调用onSaveInstanceState()方法,只有在系统之前调用了onStop()或者onPause()时,才会在接下来调用onSaveInstanceState()

视图组件中有Id属性的组件会自动保存状态,而没有Id属性的组件则不能保存状态,可以通过在View布局中对组件设置属性:savaEnabled来设置组件是否可以保存状态,或者通过调用其setSaveEnable()方法来设置

onPause()中保存数据和在onSaveInstanceState()保存数据的区别:在onSaveInstanceState()中保存的应该是短暂的UI变化,例如EditText中暂存的内容,或者CheckBox中暂存的选项,而在onPause()中保存的应该是需要保存到database中的数据

当设备的配置参数改变时(例如屏幕的方向,设备的语言,键盘的可用性),系统会销毁当前Activity并立即重新创建当前Activity(先调用onDestroy(),接着立即调用onCreate())

从Activity–A中启动Activity–B的过程:

Activity–A调用onPause()

Activity–B调用onCreate(),onStart(),onResume()

Activity–A调用onStop()(等待一段时间后如果不再返回Activity–A,接着调用onDestroy())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: